Voici ma théorie à ce sujet. Je pense que cela a beaucoup à voir avec les opérateurs qui sont valides (syntaxiquement) pour les symboles. Considérez
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
Conceptuellement, dans ces déclarations ce qui est nommé avec un type (C
, char
, bool
) est substituée par une expression de ce type plus tard. Bien sûr, l'intention est de réutiliser autant de la langue existante que possible. Donc, je pense qu'il a utilisé &
:
int &a; // &a is valid
L'important est que &
est que valide le type d'expression une référence indique: Pour lvalues
. Les références sont lvalues (variables nommées sont trop) et seulement pour les &
peuvent être appliqués:
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)
Cela a du sens. Bien que mon humble avis, le concept entier de références était assez bizarre pour les utilisateurs de longue date C, avoir à avoir soudainement l'adresse de l'opérateur ont une sémantique différente peut-être pas naturel ... – Uri
Hmm ... peut-être que vous ne devriez pas regardez ceci: http://www.open-std.org/JTC1/sc22/wg21/docs/papers/2004/n1690.html –
Je viens de me souvenir de quelque chose de D & EC++ - il souhaite maintenant qu'il mette un mot clé 'abstract' au lieu d'utiliser '= 0' sur les méthodes virtuelles; mais la réaction aux nouveaux mots réservés était violemment négative (bien que - ironiquement - sûrement il n'aurait pas eu besoin d'être un mot réservé?) –