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
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
A voir également:
- C++, variables locales et et leurs portées
- Nuage de points excel 4 variables - Forum Excel
- Adresses ip locales - Guide
- Algorithme permutation 3 variables - Forum Programmation
- Javascript somme de deux variables - Forum Javascript
- Disque local c et d - Forum Disque dur / SSD
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.
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
27 janv. 2012 à 12:24
Sauf en cas de passage par référence.
?? 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.
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
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.
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.
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
27 janv. 2012 à 18:30
Merci beaucoup à vous 2 pour l'information rapide et le complément d'info en bonus. Bon week-end !