En passant la valeur à const paramètre de référence?
Question
Je n'ai pas été en mesure de trouver une question similaire ici, ou par le biais de Google, peut-être parce que je ne sais pas si je me suis poser la bonne question, si vous ne savez pas si le titre est bon.Mais je travaille avec un code qui ressemble à ceci:
Foo * foo = new Foo();
add(*foo); //Couldnt find any similar questions on this syntax?
void add(const Foo & foo){
//What exactly is foo here? How can i manipulate its members, foo. or foo-> ?
}
La solution
La variable foo
à l'intérieur de la add
la méthode est une référence constante.Il se comporte comme un pointeur dans le sens qu'il n'est pas de copie de l'objet:vous interagissez avec elle comme si elle était l'objet lui-même.Contrairement à un pointeur, une référence ne peut pas être NULL
, et il ne peut pas être modifiée.Vous interagissez avec l'aide d'un point .
opérateur au lieu de la ->
de l'opérateur.
void add(const Foo & foo){
cout << foo.first_member << endl;
foo.const_member_function();
}
Depuis foo
est une référence constante, vous pouvez lire foo
's membres, mais vous ne pouvez pas assigner.Aussi, tous les appels de fonctions de membre sur le foo
de référence sont limitées à des fonctions explicitement marqué const
.
L'appel add
avec un déréférencé foo
est OK, tant que foo
n'est pas NULL
.En faisant référence par référence à un NULL
pointeur est un comportement indéfini.
Autres conseils
'foo' is a constant reference. You can access its members via foo.fred, foo.method(), etc., but you can't change any data members or call any non-const methods.