Pourquoi double-colon au lieu de point?


19

Il est dit que les premières implémentations C ++ ont eu un opérateur point pour l'accès à l'espace de noms. Il y a une opinion que le point est plus pratique que l'opérateur moderne à deux points.

Quel était le raisonnement derrière l'introduction du double colon?


3
Du haut de ma tête, C ++ vous permet ::symbolde le forcer à rechercher symboldans l'espace de noms global au lieu de l'espace de noms actuel, c'est donc au moins une chose qui semblerait très déroutante et introduirait probablement une ambiguïté encore plus syntaxique dans le langage si le l'opérateur point a été utilisé à la place.
Ixrec

14
L'opérateur :: horriblement :: laide prolifération :: de :: l'espace de noms C ++ :: résolution :: est partout connu sous le nom :: colon :: cancer.
Mason Wheeler

1
Je suppose que cela a causé de la confusion dans l'analyseur sémantique. Le point est également utilisé pour préfixer les noms de méthode, ce qui est un concept assez similaire et peut être difficile à isoler. C'est un moyen clair de résoudre ce problème.
Rápli András


5
L'horrible prolifération laide des attaques insensées de Mason Wheeler contre C n'a pas de nom, car un tel mal ne doit pas être digne d'un nom!
Jerry Coffin du

Réponses:


14

Comme l'a observé Jules, c'est un fait que les premières implémentations C ++ (CFront pré-1.0) avaient un point pour l'identification de la portée.

Un point a également été utilisé en C avec Classes (1980). En effet, il s'agit d'un simple extrait de 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);
}

(le code était un exemple de la façon dont les fonctions membres étaient généralement définies "ailleurs")

Le ::était l' un des ajouts à C avec des classes introduites pour produire C ++.

La raison est donnée par Stroustrup lui-même:

En C avec classes, un point était utilisé pour exprimer l'appartenance à une classe ainsi que pour exprimer la sélection d'un membre d'un objet particulier.

Cela avait été la cause d'une certaine confusion mineure et pouvait également être utilisé pour construire des exemples ambigus. Pour atténuer cela, a ::été introduit pour signifier l'appartenance à la classe et a .été conservé exclusivement pour l'appartenance à l'objet

( Une histoire de C ++: 1979−1991 [2] page 21 - § 3.3.1)


  1. Bjarne Stroustrup: "Classes: An Abstract Data Type Facility for the C Language" - Rapport technique informatique CSTR − 84 des laboratoires Bell. Avril 1980.

  2. Bjarne Stroustrup: "A History of C ++: 1979−1991" - AT&T Bell Laboratories Murray Hill, New Jersey 07974.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.