retour par reference ou par copie

retour par reference ou par copie - C++ - Programmation

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?

Reply

Marsh Posté le 16-05-2004 à 20:42:09   

Reply

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

Reply

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?

Reply

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 ?

Reply

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

Reply

Marsh Posté le 16-05-2004 à 23:26:31    

ça n'est pas ce que j'ai dit

Reply

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;
}

Reply

Marsh Posté le 16-05-2004 à 23:40:42    

ou tout simplement une allocation dnamique ...

Reply

Marsh Posté le 16-05-2004 à 23:49:04    

ok, merci

Reply

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

Reply

Marsh Posté le 17-05-2004 à 02:21:25   

Reply

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.


---------------
trainoo.com, c'est fini
Reply

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() );

Reply

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  :fou:
 
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

Reply

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

Reply

Marsh Posté le 18-05-2004 à 00:03:01    

merci, beaucoup plus simple comme ca

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed