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

Résolu/Fermé
xc35 Messages postés 6 Date d'inscription vendredi 27 janvier 2012 Statut Membre Dernière intervention 14 février 2012 - 27 janv. 2012 à 11:34
xc35 Messages postés 6 Date d'inscription vendredi 27 janvier 2012 Statut Membre Dernière intervention 14 février 2012 - 27 janv. 2012 à 18:30
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

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 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
27 janv. 2012 à 12:24
Sauf en cas de passage par référence.
0
?? 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 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
27 janv. 2012 à 14:04
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 vendredi 27 janvier 2012 Statut Membre Dernière intervention 14 février 2012
27 janv. 2012 à 18:30
Merci beaucoup à vous 2 pour l'information rapide et le complément d'info en bonus. Bon week-end !
0