ドットの代わりに二重コロンを使用する理由


19

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

二重コロンを導入した理由は何ですか?


3
C ++では、現在のネームスペースではなく、グローバルネームスペースで::symbol検索するように強制できますsymbol。そのため、非常に混乱しやすく、おそらくさらに構文的な曖昧さが言語に導入される可能性があります。代わりにドット演算子が使用されました。
Ixrec

14
:: horribly :: ugly拡散:: of of ::: C ++名前空間:: resolution :: operatorはどこでも:: known :: as colon :: cancerです。
メイソンウィーラー

1
セマンティックアナライザーで混乱を引き起こしたと思います。ドットはメソッド名の接頭辞にも使用されますが、これは非常によく似た概念であり、分離が難しい場合があります。これはそれを修正する明確な方法です。
ラプリアンドラス


5
メイソン・ウィーラーの無意味なC攻撃の恐ろしいい拡散には名前がありません。そのような悪は名前で威厳があってはならないからです!
ジェリーコフィン

回答:


14

ジュールによって観察されたように、初期のC ++実装(CFront pre-1.0)にはスコープ識別のためのドットがあったという事実です。

Cではクラス(1980)でもドットが使用されました。実際、これはClassesの 簡単な抜粋です: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);
}

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

これ::は、C ++を生成するために導入されたクラスによるCへの追加の1つでした。

理由はStroustrup自身によって与えられます:

C with Classesでは、ドットを使用して、クラスのメンバーシップを表現し、特定のオブジェクトのメンバーの選択を表現しました。

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

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


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

  2. Bjarne Stroustrup: "C ++の歴史:1979−1991"-AT&T Bell Laboratoriesマレーヒル、ニュージャージー07974。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.