2010-06-07 6 views
1

Je pense que la plupart des gens seraient encore surpris par le sujet. Cependant, je fais référence à un livre "C++ Common Knowledge: Essential Intermediate Programming" écrit par "Stephen C. Dewhurst".Clarification de la variable de référence C++

Dans le livre, il cite une phrase particulière (dans la section au titre du point 5. Les références sont Alias, pas Pointeurs), qui est comme ci-dessous

Une référence est un alias pour un objet qui existe déjà avant à l'initialisation de la référence. Une fois qu'une référence est initialisée pour faire référence à un objet particulier, il ne peut plus être fait référence à un objet différent; une référence est liée à son initialiseur pour sa vie entière

Quelqu'un peut-il s'il vous plaît expliquer le contexte de « ne peut plus tard être fait de se référer à un autre objet »

Ci-dessous le code fonctionne pour moi,

#include <iostream> 
using namespace std; 

int main(int argc, char *argv[]) 
{ 
int i = 100; 
int& ref = i; 
cout<<ref<<endl; 

int k = 2000; 
ref = k; 
cout<<ref<<endl; 

return 0; 
} 

Ici, je me réfère à la variable ref à la fois i et j variable. Et le code fonctionne parfaitement bien.

Ai-je raté quelque chose? J'ai utilisé SUSE10 64bit linux pour tester mon programme d'exemple.

Merci de votre participation à l'avance.

Répondre

11

Vous n'êtes pas liez ref à un autre objet: quand vous faites ref = k, il est comme si vous avez fait , qui simplement réaffecté la valeur dei. En d'autres termes, vous appelez ioperator=.

est ici quelque chose qui démontre mieux l'idée:

#include <iostream> 

int main() 
{ 
    std::ostream& stream = std::cout; 
    stream = std::cerr; // fails to compile! Cannot access ostream::operator= 
    return 0; 
} 
5

La ligne ref = k ne change pas ce que ref fait référence, il est d'attribuer la valeur de k à la valeur de ref. Si vous imprimez par la suite i, vous verrez que i est maintenant 2000 également.

2
#include <iostream> 

int main() 
{ 
    int i = 100; 
    int& ref = i; 
    int k = 2000; 
    ref = k; 

    if (&ref == &i) std::cout << "ref is bound to i\n"; 
    if (&ref == &k) std::cout << "ref is bound to k\n"; 
} 
+0

Nice one !!! J'ai aimé la réponse. –

Questions connexes