web-dev-qa-db-ja.com

なぜドットの代わりにコロンを二重にするのですか?

初期のC++実装には、名前空間アクセス用のドット演算子があったのは です。ドットは現代の二重コロン演算子よりも便利だという意見があります。

ダブルコロンを導入した理由は何ですか?

19
Rich

Julesによって観察 のように、初期のC++実装(CFront 1.0より前)には、スコープを識別するためのドットがありました。

ドットはC with Classes(1980)でも使用されました。確かに、これはClasses:An Abstract Data Type Facility for the C Language1 からの簡単なスニペットです。

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);
}

(コードは、メンバー関数が通常「他の場所」で定義された方法の例でした)

::は、C++を生成するために導入されたC with Classesへの追加機能の1つでした。

その理由はStroustrup自身が示しています。

クラスのあるCでは、ドットはクラスのメンバーシップを表すため、および特定のオブジェクトのメンバーの選択を表すために使用されました。

これはいくつかの小さな混乱の原因であり、あいまいな例を作成するためにも使用できます。これを軽減するには、::は、クラスのメンバーシップを意味するように導入され、.はオブジェクトのメンバーシップのためにのみ保持されました

C++の歴史:1979-1991 [2] 21ページ-§3.3.1)


  1. Bjarne Stroustrup:「クラス:C言語用の抽象データ型機能」-ベル研究所コンピュータサイエンステクニカルレポートCSTR-84。 1980年4月。

  2. Bjarne Stroustrup:「C++の歴史:1979-1991」-AT&T Bell Laboratories Murray Hill、ニュージャージー07974。

14
manlio