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-> ?

} 
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top