Dans quel cas utiliser comme type de retour d'une fonction une référence ?
Et pourquoi ?
Je n'ai pas trouvé cette info dans la FAQ.
Merci.
Version imprimable
Dans quel cas utiliser comme type de retour d'une fonction une référence ?
Et pourquoi ?
Je n'ai pas trouvé cette info dans la FAQ.
Merci.
Quand on veut éviter une copie? (soit par soucis d'optimisation soit pour donner un accés en écriture à la donnée)
Et uniquement si on renvoie une référence qui est passée en paramètre ou si on renvoie une référence sur une instance qui continuera d'exister après la fin de la fonction.
Par exemple :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class A { B m_b; public: B& b() { return m_b; } // valide (même si ce n'est pas nécessaire une bonne chose) B& transfer(B& v) { return v; } // valide B& autre() { B temp; return temp; // INVALIDE : temp sera détruit lorsque son destructeur sera appelé, // c'est à dire une fois que return aura été évalué. } };
Bonjour,
juste une précision: le plus souvent, une référence est renvoyée comme constante:
C'est une façon d'accéder directement à la variable m_b, sans faire de copie inutile, et en s'assurant qu'elle ne sera pas modifiée par la classe appellante.Code:const B & b() const { return m_b; }
T& operator[](int i) etant le parfait contre-exemple :mrgreen:
OK, je vous remercie tous !
Me voilà un peu plus éclairé. :-)
Salut,Tout comme l'opérateur = et tous ses composés :P:
NOTA: on remarquera que, dans le cas présent, nous renvoyons en réalité une référence sur l'objet courant, ce qui est quand même particulier ;)Code:
1
2
3
4
5
6
7 class MyClass { public: MyClass & operator=(/* les paramètres */ ); MyClass & operator +=(/* les paramètres */ ) ; /*...*/ };