2009-02-03 10 views
4

Dans certains textes, il est indiqué que nous ne pouvons pas affecter de valeurs constantes à une variable de référence. Quand j'ai exécuté un tel programme, je pouvais le faire. Y at-il une condition que nous ne pouvons pas attribuer une valeur constante à une variable de référence?variable de référence

+0

Pouvez-vous poster quelques exemples de code? Je pense que les lecteurs peuvent avoir de la difficulté à comprendre votre description sans code à consulter. –

Répondre

1

Vous ne pouvez pas affecter une valeur constante à une référence non constante, de la même manière que vous ne pouvez pas affecter une adresse de valeur constante à un pointeur pointant sur une valeur non constante.

Au moins, pas sans const_cast.

Éditer: Si vous faisiez réellement référence à des valeurs littérales, la réponse de Luc est la meilleure. Je parlais de variables const, pas de littéraux.

10

Vous pouvez initialiser une référence constante à une valeur constante.

const int &i = 12; 

Si la référence n'est pas const, vous obtenez une erreur de compilation.

int &i = 12; //compiler error 

Les valeurs constantes (par exemple les littéraux) sont (la plupart du temps) stockées dans des segments en lecture seule de la mémoire. Par conséquent, vous ne pouvez pas les référencer en utilisant des références non-const, car cela signifie que vous pourriez les modifier.

+0

ni l'un ni l'autre sont des affectations - ce sont deux initialisations –

1

Vous pourriez être un peu confus concernant la différence entre "initialisation" et "affectation". Celles-ci sont différentes en C++ et la compréhension de la différence est cruciale pour comprendre le langage. Ignorant les références:

int x = 1; // initialisation 
x = 1;  // assignment 

Références ne peuvent être initialisés

int & r = x; // initialisation 
r = 2;  // assigns 2 to x _not_ to r 

Il n'y a aucun moyen de re-initialisant une référence.

En ce qui concerne votre question, en ce qui consts sont concernés, vous pouvez référence const avec initialiser une valeur const:

const int & r2 = 42; 
Questions connexes