Pages

mercredi 15 mai 2013

Référence constante sur référence

Une petite note sur les références et le qualificatif const en commençant par un exemple :).

typedef int& reference;
int i = 0;
const reference r = i;
r = 3; //possible car r est en réalité un int&

Comme le montre l'exemple, r est modifiable alors que const est présent. En fait, ajouter const sur une référence ne fait rien. Pareil pour volatile cela dit.

J'aurais pu mettre `int & const r` mais comme const ne peut s'appliquer directement sur une référence, j'ai dû ruser ;).

Si on considère les références comme des pointeurs constants non nuls (car c'est ce qu'elles sont) et en transformant le premier exemple, on obtient:

typedef int * const pointeur_constant;
int i = 0;
const pointeur_constant r = &i;

Donc
decltype(r) = pointeur_constant const = int * const const = int * const = pointeur_constant

À ce moment on se rend compte que le type de r n'est autre que pointeur_constant. const n'a fait qu'ajouter une information déjà présente, il n'a donc aucune utilité.

Aucun commentaire: