Вот моя теория. Я думаю, что это имеет много общего с тем, какие операторы действительны (синтаксически) для символов. Рассмотрим
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)
Это имеет смысл. Хотя ИМХО, вся концепция ссылок была достаточно странной для долгосрочных пользователей C, что наличие внезапного наличия адреса оператора имеет другую семантику, возможно, не было естественным ... – Uri
Хм ... может быть, вы не должны посмотрите на это: http://www.open-std.org/JTC1/sc22/wg21/docs/papers/2004/n1690.html –
Я только что вспомнил что-то из D & EC++ - он хочет, чтобы теперь он добавил ключевое слово 'abstract' вместо использования '= 0' для виртуальных методов; но реакция на новые зарезервированные слова была сильно отрицательной (хотя, по иронии судьбы, это было бы не обязательно для зарезервированного слова?) –