Perché il doppio punto invece del punto?


19

Si dice che le prime implementazioni in C ++ abbiano avuto un operatore punto per l'accesso allo spazio dei nomi. Si ritiene che il punto sia più conveniente del moderno operatore a doppio punto.

Qual è stato il ragionamento alla base dell'introduzione del doppio colon?


3
Fuori dalla mia testa, C ++ ti consente ::symboldi forzarlo a cercare symbolnello spazio dei nomi globale anziché nello spazio dei nomi corrente, quindi questa è almeno una cosa che sembrerebbe molto confusa e probabilmente introdurrebbe ancora più ambiguità sintattica nel linguaggio se il è stato utilizzato invece l'operatore punto.
Ixrec,

14
Il :: orribile :: brutta proliferazione :: dello spazio dei nomi :: C ++ :: risoluzione :: l'operatore è ovunque :: conosciuto :: come colon :: cancro.
Mason Wheeler,

1
Immagino che abbia causato confusione nell'analizzatore semantico. Il punto viene anche utilizzato per il prefisso dei nomi dei metodi, che è un concetto abbastanza simile e potrebbe essere difficile da isolare. Questo è un modo chiaro per risolverlo.
Rápli András,


5
L'orribile e brutta proliferazione degli insensati attacchi di Mason Wheeler su C non ha nome, perché un tale male non deve essere degno di un nome!
Jerry Coffin,

Risposte:


14

Come osservato da Jules è un dato di fatto che le prime implementazioni C ++ (CFront pre-1.0) avevano un punto per l'identificazione dell'ambito.

Un punto è stato usato anche in C with Classes (1980). In effetti questo è un semplice frammento di Classes: An Abstract Data Type Facility for the C Language 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);
}

(il codice era un esempio di come le funzioni membro venivano generalmente definite "altrove")

L' ::era una delle aggiunte a C con Classi introdotti prodotti C ++.

La ragione è data dallo stesso Stroustrup:

In C con Classi, è stato usato un punto per esprimere l'appartenenza a una classe e per esprimere la selezione di un membro di un particolare oggetto.

Questa era stata la causa di qualche lieve confusione e poteva anche essere usata per costruire esempi ambigui. Per alleviare questo, è ::stato introdotto per indicare l'appartenenza alla classe ed è .stato mantenuto esclusivamente per l'appartenenza all'oggetto

( Una storia di C ++: 1979-1991 [2] pagina 21 - § 3.3.1)


  1. Bjarne Stroustrup: "Classi: una struttura di tipo di dati astratta per il linguaggio C" - Bell Laboratories Informatica Relazione tecnica CSTR − 84. Aprile 1980.

  2. Bjarne Stroustrup: "Una storia di C ++: 1979-1991" - AT&T Bell Laboratories Murray Hill, New Jersey 07974.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.