Ecco la mia teoria al riguardo. Penso che abbia molto a che fare con ciò che gli operatori sono validi (sintatticamente) per i simboli. Considerare
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
Concettualmente, in tali dichiarazioni quello denominato con un tipo (C
, char
, bool
) è sostituito con un'espressione di quel tipo in seguito. Naturalmente l'intenzione è di riutilizzare il più possibile il linguaggio esistente. Quindi penso che ha usato &
:
int &a; // &a is valid
L'importante è che &
è valida solo sul tipo di espressione denota un riferimento: Per lvalues
. I riferimenti sono lvalue (variabili chiamate sono troppo) e solo per loro possono essere applicati &
:
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)
fonte
2009-03-22 00:10:25
Questo ha senso. Sebbene IMHO, l'intero concetto di riferimenti fosse abbastanza bizzarro per gli utenti di C di vecchia data, che dover improvvisamente avere l'indirizzo di un operatore con una semantica diversa potrebbe non essere stato naturale ... – Uri
Hmm ... forse non dovresti guarda questo: http://www.open-std.org/JTC1/sc22/wg21/docs/papers/2004/n1690.html –
Mi sono appena ricordato qualcosa di D & EC++ - desidera che ora inserisca una parola chiave "astratta" invece di usare "= 0" sui metodi virtuali; ma la reazione a nuove parole riservate era violentemente negativa (sebbene - ironia della sorte - sicuramente non avrebbe dovuto essere una parola riservata?) –