Почему двойная двоеточие вместо точки?


19

Он , по слухам , что в начале C ++ реализация имела точечный оператор для доступа пространства имен. Существует мнение, что точка более удобна, чем современный оператор с двойным двоеточием.

Что послужило причиной введения двойного двоеточия?


3
Вдобавок ко всему, C ++ позволяет вам ::symbolзаставить его искать symbolв глобальном пространстве имен вместо текущего пространства имен, так что это по крайней мере одна вещь, которая выглядела бы очень запутанно и, вероятно, привнесла бы еще большую синтаксическую неоднозначность в язык, если Вместо этого был использован точечный оператор.
Ixrec

14
:: ужасно :: ужасное распространение :: оператора пространства имен :: C ++ :: resolution :: оператор везде известен как :: двоеточие :: рак.
Мейсон Уилер

1
Я думаю, это вызвало путаницу в семантическом анализаторе. Dot также используется для добавления префиксов к именам методов, что является довольно похожим понятием, и его может быть трудно выделить. Это четкий способ исправить это.
Рапли Андрас


5
Ужасное уродливое распространение бессмысленных атак Мейсона Уилера на C не имеет названия, потому что такое зло не должно быть достойным имени!
Джерри Коффин

Ответы:


14

Как заметил Жюль , это факт, что ранние реализации C ++ (CFront до 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 ++.

Причина дана самим Страуструпом:

В C с классами точка использовалась для выражения принадлежности к классу, а также для выражения выбора члена определенного объекта.

Это послужило причиной некоторого небольшого замешательства и могло также использоваться для построения неоднозначных примеров. Чтобы облегчить это, ::был введен, чтобы означать членство класса и .был сохранен исключительно для членства объекта

( История C ++: 1979–1991 гг. [2], стр. 21 - § 3.3.1)


  1. Бьярн Страуструп: «Классы: средство абстрактного типа данных для языка Си» - Технический отчет по информатике Bell Laboratories CSTR − 84. Апрель 1980 г.

  2. Бьярн Страуструп: «История C ++: 1979–1991» - AT & T Bell Laboratories Murray Hill, Нью-Джерси 07974.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.