Warum Doppelpunkt statt Punkt?

19

Es wird gemunkelt, dass frühe C ++ - Implementierungen einen Punktoperator für den Namespace-Zugriff hatten. Es gibt eine Meinung, dass der Punkt bequemer ist als der moderne Doppelpunktoperator.

Was war der Grund für die Einführung des Doppelpunkts?

Reich
quelle
3
C ++ erlaubt es Ihnen, die ::symbolSuche symbolim globalen Namespace anstatt im aktuellen Namespace zu erzwingen. Das ist also zumindest eine Sache, die sehr verwirrend aussieht und wahrscheinlich noch mehr syntaktische Ambiguität in die Sprache einbringt, wenn Stattdessen wurde der Punktoperator verwendet.
Ixrec
14
Der :: schrecklich :: hässliche Verbreitungsweg :: des :: C ++ - Namespace :: Resolution :: -Operators ist :: überall :: als Dickdarm :: Krebs bekannt.
Mason Wheeler
1
Ich vermute, es hat im semantischen Analysator Verwirrung gestiftet. Punkt wird auch zum Präfixieren von Methodennamen verwendet, was ein ziemlich ähnliches Konzept darstellt und möglicherweise schwer zu isolieren ist. Dies ist ein klarer Weg, um das zu beheben.
Rápli András
5
Die schreckliche, hässliche Verbreitung von Mason Wheelers sinnlosen Angriffen auf C hat keinen Namen, denn solch ein Übel darf nicht mit einem Namen gewürdigt werden!
Jerry Coffin

Antworten:

14

Wie von Jules beobachtet , hatten frühe C ++ - Implementierungen (CFront vor 1.0) einen Punkt für die Bereichsidentifikation.

Ein Punkt wurde auch in C mit Klassen (1980) verwendet. In der Tat ist dies ein einfacher Ausschnitt aus Classes: Eine abstrakte Datentyp-Funktion für die C-Sprache 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);
}

(Der Code war ein Beispiel dafür, wie Mitgliedsfunktionen normalerweise "anderswo" definiert wurden.)

Dies ::war eine der Ergänzungen zu C mit Klassen, die eingeführt wurden, um C ++ zu erzeugen.

Der Grund wird von Stroustrup selbst angegeben:

In C mit Klassen wurde ein Punkt verwendet, um die Zugehörigkeit zu einer Klasse sowie die Auswahl eines Mitglieds eines bestimmten Objekts auszudrücken.

Dies war der Grund für einige leichte Verwirrung gewesen und konnte auch dazu verwendet werden, zweideutige Beispiele zu konstruieren. Um dies zu mildern, ::wurde eingeführt, um die Zugehörigkeit zur Klasse zu bedeuten und .wurde ausschließlich für die Zugehörigkeit zum Objekt beibehalten

( Eine Geschichte von C ++: 1979-1991 [2] Seite 21 - § 3.3.1)


  1. Bjarne Stroustrup: "Klassen: Eine abstrakte Datentyp-Einrichtung für die C-Sprache" - Bell Laboratories Computer Science Technical Report CSTR-84. April 1980.

  2. Bjarne Stroustrup: "Eine Geschichte von C ++: 1979-1991" - AT & T Bell Laboratories Murray Hill, New Jersey 07974.

Manlio
quelle