¿Por qué dos puntos en lugar de punto?

19

Se rumorea que las primeras implementaciones de C ++ han tenido un operador de puntos para el acceso al espacio de nombres. Existe la opinión de que el punto es más conveniente que el operador moderno de dos puntos.

¿Cuál fue el razonamiento detrás de la introducción del doble colon?

Rico
fuente
3
Fuera de mi cabeza, C ++ te permite ::symbolforzarlo a buscar symbolen el espacio de nombres global en lugar del espacio de nombres actual, por lo que eso es al menos una cosa que parecería muy confusa y probablemente introduciría aún más ambigüedad sintáctica en el lenguaje si el Se utilizó el operador de punto en su lugar.
Ixrec
14
La :: horrible :: fea proliferación :: del :: espacio de nombres C ++ :: resolución :: operador en todas partes es :: conocido :: como colon :: cáncer.
Mason Wheeler
1
Supongo que causó confusión en el analizador semántico. Dot también se usa para prefijar nombres de métodos, que es un concepto bastante similar y puede ser difícil de aislar. Esta es una forma clara de arreglar eso.
Rápli András
55
La horrible y fea proliferación de los ataques sin sentido de Mason Wheeler en C no tiene nombre, ¡porque ese mal no debe ser digno con un nombre!
Jerry Coffin

Respuestas:

14

Como observó Jules , es un hecho que las primeras implementaciones de C ++ (CFront pre-1.0) tenían un punto para la identificación del alcance.

También se usó un punto en C con las clases (1980). De hecho, este es un fragmento simple de las clases: un recurso de tipo de datos abstractos para el lenguaje C 1 :

class stack {
    char    s[SIZE];  /* array of characters */
    char *  min;      /* pointer to bottom of stack */
    char *  top;      /* pointer to top of stack */
    char *  max;      /* pointer to top of allocated space */
    void    new();    /* initialization function (constructor) */
public:
    void push(char);
    char pop();
};

char stack.pop()
{
    if (top <= min) error("stack underflow");
    return *(−−top);
}

(el código era un ejemplo de cómo las funciones miembro se definían típicamente "en otro lugar")

El ::era una de las adiciones a C con las clases introducidas a los productos C ++.

La razón la da el propio Stroustrup:

En C con clases, se utilizó un punto para expresar la pertenencia a una clase, así como para expresar la selección de un miembro de un objeto en particular.

Esta había sido la causa de una pequeña confusión y también podría usarse para construir ejemplos ambiguos. Para aliviar esto, ::se introdujo para significar membresía de clase y .se retuvo exclusivamente para membresía de objeto

( Una historia de C ++: 1979-1991 [2] página 21 - § 3.3.1)


  1. Bjarne Stroustrup: "Clases: una instalación de tipo de datos abstractos para el lenguaje C" - Informe técnico de informática de Bell Laboratories CSTR − 84. Abril de 1980.

  2. Bjarne Stroustrup: "Una historia de C ++: 1979-1991" - AT&T Bell Laboratories Murray Hill, Nueva Jersey 07974.

manlio
fuente