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)
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.
Bjarne Stroustrup: "Una historia de C ++: 1979-1991" - AT&T Bell Laboratories Murray Hill, Nueva Jersey 07974.
::symbol
forzarlo a buscarsymbol
en 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.