Como observado por Jules , é fato que as implementações iniciais de C ++ (CFront pré-1.0) tinham um ponto para identificação do escopo.
Um ponto também foi usado em C com Classes (1980). De fato, este é um trecho simples de Classes: um recurso abstrato de tipo de dados para a linguagem 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);
}
(o código era um exemplo de como as funções de membro eram normalmente definidas "em outro lugar")
Essa ::
foi uma das adições ao C com Classes introduzidas para produzir C ++.
A razão é dada pelo próprio Stroustrup:
Em C com Classes, um ponto foi usado para expressar a associação de uma classe, bem como expressar a seleção de um membro de um objeto específico.
Isso causou algumas pequenas confusões e também poderia ser usado para construir exemplos ambíguos. Para aliviar isso, ::
foi introduzido como membro da classe e .
foi mantido exclusivamente para membro do objeto
( A History of C ++: 1979-1991 [2] página 21 - § 3.3.1)
Bjarne Stroustrup: "Classes: um recurso abstrato de tipo de dados para a linguagem C" - Relatório Técnico da Ciência da Computação da Bell Laboratories CSTR-84. Abril de 1980.
Bjarne Stroustrup: "A History of C ++: 1979-1991" - Laboratórios AT&T Bell Murray Hill, Nova Jersey 07974.
::symbol
forçá-lo a procurarsymbol
no espaço para nome global em vez do espaço para nome atual; portanto, isso é pelo menos uma coisa que pareceria muito confusa e provavelmente introduziria ainda mais ambiguidade sintática na linguagem se o operador de ponto foi usado.