Чому подвійна кишка замість крапки?


19

Він , по слухам , що в початку C ++ реалізація мала точковий оператор для доступу простору імен. Існує думка, що крапка зручніша, ніж сучасний оператор подвійної двокрапки.

Що було міркуванням про введення подвійної кишки?


3
Зверху голови C ++ дозволяє вам ::symbolзмусити його шукати symbolу глобальному просторі імен замість поточного простору імен, так що це хоча б одне, що виглядатиме дуже заплутано і, можливо, введе в мову ще синтаксичну неоднозначність, якщо Натомість використовувався оператор крапки.
Іхрек

14
:: жахливо :: потворне розповсюдження :: :: :: простору імен C ++ :: роздільна здатність :: оператор скрізь: відомий як двокрапка :: рак.
Мейсон Уілер

1
Я думаю, це спричинило плутанину в семантичному аналізаторі. Крапка також використовується для імен методів префіксації, що є досить схожим поняттям і може бути важко виділити. Це чіткий спосіб виправити це.
Раплі Андраш


5
Жахливе потворне розповсюдження безглуздих нападів Мейсона Уілера на С не має імені, бо таке зло не повинно бути гідним іменем!
Джеррі Ковф

Відповіді:


14

Як зауважив Жуль, це факт, що на ранніх C ++ впровадженнях (CFront до 1,0) була крапка для ідентифікації області.

Крапка також була використана в C with Classes (1980). Дійсно, це простий фрагмент з класів: Абстрактний інструмент типу даних для мови С 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 з класами крапка використовувалася для вираження належності до класу, а також для вираження вибору члена певного об’єкта.

Це було причиною незначної плутанини і також могло бути використане для побудови неоднозначних прикладів. Щоб полегшити це, ::було введено означає членство в класі і .зберігалося виключно для належності до об'єкта

( Історія С ++: 1979-1991 [2] стор. 21 - § 3.3.1)


  1. Bjarne Stroustrup: "Класи: абстрактний інструмент типу даних для мови C" - Bell Laboratories Технічний звіт з комп'ютерних наук CSTR − 84. Квітень 1980 року.

  2. Bjarne Stroustrup: "Історія C ++: 1979-1991" - AT&T Bell Laboratories Murray Hill, Нью-Джерсі, 07974.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.