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.
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)
"Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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é. } };
[FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.
Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.
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 : Sélectionner tout - Visualiser dans une fenêtre à part const B & b() const { return m_b; }
« L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
Spinoza — Éthique III, Proposition VII
T& operator[](int i) etant le parfait contre-exemple
OK, je vous remercie tous !
Me voilà un peu plus éclairé. :-)
Salut,Tout comme l'opérateur = et tous ses composés :
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 class MyClass { public: MyClass & operator=(/* les paramètres */ ); MyClass & operator +=(/* les paramètres */ ) ; /*...*/ };
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager