Por que dois pontos em vez de ponto?

19

rumores de que as implementações iniciais do C ++ tiveram um operador de ponto para acesso ao namespace. Há uma opinião de que o ponto é mais conveniente que o operador moderno de dois pontos.

Qual foi o motivo por trás da introdução do cólon duplo?

Rico
fonte
3
Em primeiro lugar, o C ++ permite ::symbolforçá-lo a procurar symbolno 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.
Ixrec
14
A proliferação :: horrivelmente :: feia :: do operador namespace :: C ++ :: resolution :: em todos os lugares é :: conhecida :: como dois pontos :: cancer.
Mason Wheeler
1
Eu acho que causou confusão no analisador semântico. Dot também é usado para prefixar nomes de métodos, que é um conceito bastante semelhante e pode ser difícil de isolar. Esta é uma maneira clara de corrigir isso.
Rápli András 02/04
5
A horrível e feia proliferação dos ataques sem sentido de Mason Wheeler contra C não tem nome, porque esse mal não deve ser digno de um nome!
Jerry Coffin

Respostas:

14

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)


  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.

  2. Bjarne Stroustrup: "A History of C ++: 1979-1991" - Laboratórios AT&T Bell Murray Hill, Nova Jersey 07974.

manlio
fonte