Почему амперсанд был выбран в качестве символа для ссылок в C++? [закрытый]

Вам нужно только выбрать список строк:

pd.DataFrame(data.get('users'))
5
задан RBerteig 22 March 2009 в 06:03
поделиться

5 ответов

Stroustrup всегда очень отказывался представить новый зарезервированный символ или имя, таким образом, он, вероятно, использовал его, чтобы не заставлять функцию выглядеть странной пользователям C.

7
ответ дан 18 December 2019 в 06:23
поделиться

В дополнение к ответу Earwicker, с которым я обычно соглашаюсь. Я также размышлял бы, что с тех пор и "адрес -" оператора, это несколько подходяще. Так как ссылка во многих отношениях похожа на передачу адресом вместо значением.

В дополнение к этому, беря адрес переменной часто упоминается как "ссылка"

(Да я знаю, что ссылки не должны быть реализованы с помощью указателей под капотом, я обращаюсь к способу, которым они концептуально работают).

Это - просто предположение все же.

12
ответ дан 18 December 2019 в 06:23
поделиться

Кто знает, почему Stroustrup делает что-либо, но мое предположение - то, что, потому что реализация параметров ссылки включает передачу адреса lvalue, Stroustrup выбрал операцию вычисления адреса C, потому что это даст программистам C верную мысль о модели стоимости.

2
ответ дан 18 December 2019 в 06:23
поделиться

Вот моя теория на этом. Я думаю, что это имеет непосредственное отношение к тому, какие операторы действительны (синтаксически) для символов. Рассмотреть

int a[1]; // a[1] is valid (syntactically)
int *a; // *a is valid
int a(char, bool); // a(<a char>, <a bool>) is valid (function call)
int C::*a; // <a C>.*a is valid

Концептуально, в тех объявлениях, что называют с типом (C, char, bool) заменен с выражением того типа позже. Конечно, намерение состоит в том, чтобы снова использовать как можно больше существующего языка. Таким образом, я думаю, что он использовал &:

int &a; // &a is valid

Важный - это & только допустимо на виде выражения, которое обозначает ссылка: Для lvalues. Ссылки являются lvalues (названный переменными, также), и только для них & может быть применен:

int &g(); // &g() is valid (taking the address of the referred to integer)
int g(); // &g() is *not* valid (can't apply to temporary int)
2
ответ дан 18 December 2019 в 06:23
поделиться

Моя мысль была то, что существует 2 символа, используемые в указателях: * и и. так как интервал* означает указатель на интервал, вероятно, Stroustrup не хотел представлять совершенно новый символ. Так как ссылки являются видом подобных указателей, он придерживался с и. Плюс, единственное ранее допустимое использование и должен был взять адрес чего-то, таким образом, было нормально использовать в объявлениях.

2
ответ дан 18 December 2019 в 06:23
поделиться