retour par reference ou par copie - C++ - Programmation
Marsh Posté le 16-05-2004 à 23:04:19
qu'il faut que tu renvoies une référence sur quelque chose qui existe dans le contexte appelant
Marsh Posté le 16-05-2004 à 23:10:52
ok, en gros si je créé l'objet dans la fonction il faut le retourner par copie, c'est ca?
Marsh Posté le 16-05-2004 à 23:13:00
je sais pas, d'après ce que je viens de te dire, tu en déduis quoi ? est-ce que tu peux me donner un exemple ou on peut créer un objet dans une fonction et le retourner par référence ?
Marsh Posté le 16-05-2004 à 23:15:13
ben non, d'apres ce que j'ai compris on peut pas retourner par reference un objet crée dans une fonction
Marsh Posté le 16-05-2004 à 23:31:12
bon, hesite pas a dir si g rien piger, mais ca serait pas un exemple ca ?
Object &func()
{
static Object o;
...
return o;
}
Marsh Posté le 17-05-2004 à 02:21:25
une autre chose pas mal aussi, c'est retournée une référence sur un paramètre lui même passé par référence
Marsh Posté le 17-05-2004 à 02:49:13
(en passage par copie, en fait c'est HS)
y'a pas une grosse feinte si on construit l'objet dans l'expression du return (il serait alloué dans son emplacement de destination directement, sans passer par la case recopie) ? il me semble avoir lu un truc comme ça une fois.
Marsh Posté le 17-05-2004 à 09:24:24
non, pas de feinte, juste une optimisation permise que tout les compilateurs ne font pas. donc toi tu ne peux rien faire.
mais rien ne t'empêche d'éviter une autre copie en rattrapant le résultat par &
R &r( f() );
Marsh Posté le 17-05-2004 à 21:39:03
oui c'est vrai ca, je l'avais deja lu et il parait meme qu'il peuve supprimer la creation de la variable temporaire si elle sert de valeur retour
merci encore pour ces precision
"une autre chose pas mal aussi, c'est retournée une référence sur un paramètre lui même passé par référence"
en fait ca je le fais souvent, ca m'enerve, en fait je crois que j'avais piger
j'ai une autre question, j'ai vu qu'il en avait qui regardait le listing asm generer par le compilo, pour par exemple verifier les optimisation qu'il fait a ce niveau
donc je voudrais savoir si par curiosité il etait possible de voir si le compilo fait une copie dans ce cas (dans le cas ou la valeur de retour est construite dans le return)?
ou peut etre est-ce inutile ?
merci d'avance
Marsh Posté le 17-05-2004 à 23:53:33
oui : tu mets des cout dans tout ce qui constitue la forme de coplien
constructeur par défaut
constructeur de recopie
operateur=
destructeur
Marsh Posté le 16-05-2004 à 20:42:09
en fait j'aimerais savoir ce qu'implique un retour par reference, mis a part que c'est plus rapide, quelles contraintes ca pose au niveau du code?