C++, variables locales et et leurs portées
Résolu
xc35
Messages postés
6
Statut
Membre
-
xc35 Messages postés 6 Statut Membre -
xc35 Messages postés 6 Statut Membre -
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)
ç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 :)
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 :)
A voir également:
- C++, variables locales et et leurs portées
- Adresses ip locales - Guide
- Actualités locales - Guide
- Javascript : prompt() et variables ✓ - Forum Javascript
- Nuage de points excel 4 variables ✓ - Forum Bureautique
- Printf et type de variables ✓ - Forum C
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.
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.
?? 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.
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.