C++, variables locales et et leurs portées

Résolu
xc35 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
xc35 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour Mesdames Messieurs !

je suis en train de lire les diapos de cours de programmation et une chose ne m'est pas évidente à saisir.

en sachant qu'une variable locale n'est disponible que dans le bloc ou elle est imbriquée.

comment une méthode/fonction comme celle ci peut elle renvoyer un résultat exploitable a l'extérieur du bloc ou elle est déclarée.

(à noter , la classe vecteur possède 3 attributs x, y et z)
Vecteur Vecteur::somme(Vecteur v) const
{
Vecteur somme;
somme.x =x+v.x;
somme.y =x+v.y;
somme.z =x+v.z;
return somme;
}


ça ne me choquait pas quand une fonction renvoyait un int, ou autre, mais là, tout d'un coup je suis perdu.

une lanterne ? Merci :)

2 réponses

le père
 
Bonjour

C'est justement le rôle de l'instruction return : elle crée une copie de la valeur à renvoyer (que ce soit un int ou un vecteur, ou une constante ou tout ce que tu veux)
Celui qui appelle la fonction récupère un résultat (cette copie), mais il n'accède pas à la variable locale elle-même, qui est d'ailleurs déjà détruite quand le contrôle retourne à l'appelant.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Sauf en cas de passage par référence.
0
le père
 
?? ce que j'ai écrit reste vrai même en cas de passage par référence.
Car la valeur renvoyée par une fonction est celle indiquée dans un return. Quand on utilise un passage par référence, la fonction ne renvoie pas une valeur, elle modifie une variable, ce qui est différent.. D'ailleurs la question de xc35 portait sur le fait de faire un return sur une variable locale, qu'il assimilait au fait que l'appelant avait accès à la variable, alors qu'il n'a accès qu'à sa valeur.
Et si le passage par référence peut éventuellement permettre à l'appelant d'avoir accès à une variable à portée locale, encore faut-il avoir prévu de la déclarer static, sous peine d'avoir un magnifique plantage.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
sous peine d'avoir un magnifique plantage
j'aurai du le préciser. C'était un peu le but de ma remarque.
double& f(){double a=5.1;return a;}
devrais en effet donner un résultat catastrophique.
0
xc35 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup à vous 2 pour l'information rapide et le complément d'info en bonus. Bon week-end !
0