Dlaczego podwójny dwukropek zamiast kropki?

19

Jest podobno , że wczesne C ++ implementacje miały dot operatora o udostępnienie przestrzeni nazw. Istnieje opinia, że ​​kropka jest wygodniejsza niż nowoczesny operator dwukropka.

Jakie było uzasadnienie wprowadzenia podwójnego dwukropka?

Bogaty
źródło
3
Poza moją głową C ++ pozwala ::symbolzmusić go do szukania symbolw globalnej przestrzeni nazw zamiast w bieżącej przestrzeni nazw, więc jest to co najmniej jedna rzecz, która wyglądałaby bardzo myląco i prawdopodobnie wprowadziłaby jeszcze więcej dwuznaczności składniowej do języka, jeśli zamiast tego zastosowano operator kropki.
Ixrec,
14
:: horrorly :: brzydka proliferacja :: przestrzeni nazw :: C ++ :: operator :: Resolution :: wszędzie jest :: znany :: jako dwukropek :: rak.
Mason Wheeler,
1
Myślę, że spowodowało to zamieszanie w analizatorze semantycznym. Kropka służy również do prefiksowania nazw metod, co jest dość podobną koncepcją i może być trudne do wyodrębnienia. Jest to wyraźny sposób, aby to naprawić.
Rápli András
5
Straszne brzydkie rozprzestrzenianie się bezsensownych ataków Masona Wheelera na C nie ma imienia, ponieważ takie zło nie może być godne z jakimkolwiek imieniem!
Jerry Coffin

Odpowiedzi:

14

Jak zauważył Jules , faktem jest, że wczesne implementacje C ++ (CFront przed 1.0) miały kropkę do identyfikacji zakresu.

Kropka była również używana w C z klasami (1980). Rzeczywiście jest to prosty fragment z klas: Narzędzie abstrakcyjnego typu danych dla języka 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);
}

(kod był przykładem tego, jak funkcje składowe były zazwyczaj definiowane „gdzie indziej”)

::Był jednym z dodatków do C z klas wprowadzoną do C ++.

Przyczynę podaje sam Stroustrup:

W C z klasami kropka została użyta do wyrażenia przynależności do klasy, a także do wyrażenia wyboru członka określonego obiektu.

Było to przyczyną drobnych nieporozumień i można je również wykorzystać do konstruowania niejednoznacznych przykładów. Aby to złagodzić, ::wprowadzono oznaczanie przynależności do klasy i .zachowano wyłącznie dla przynależności do przedmiotu

( A History of C ++: 1979−1991 [2] page 21 - § 3.3.1)


  1. Bjarne Stroustrup: „Klasy: narzędzie abstrakcyjnego typu danych dla języka C” - raport techniczny Bell Laboratories Computer Science CSTR-84. Kwiecień 1980 r.

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

manlio
źródło