Salut,
Faut il te rappeler que tu peux (et qu'il est d'ailleurs conseillé de le faire) ne déclarer tes différentes variables que lorsque tu en a besoin
Cela implique qu'il n'est pas du tout exclu que, lorsque tu invoque une fonction, tu doive assigner une valeur calculée par cette fonction à une variable... que tu crée au moment même.
Dans de telles conditions, il devient (c'est logique ) impossible de passer cette nouvelle variable directement à la fonction
S'il est effectivement possible de passer des paramètres en s'assurant que les modifications apportée au sein de la fonction appelée seront répercutées dans la fonction appelante, il faut néanmoins rester conscient de la responsabilité de chaque chose:
Le but premier des paramètres / arguments d'une fonction est... d'apporter des informations dont cette fonction ne dispose pas "d'elle-même", et le but de la valeur de retour est... de permettre à la fonction appelante de récupérer le résultat de la fonction appelée.
Si tu reste tout à fait libre de la manière dont tu décide d'interpréter ce retour ( résultat du calcul comme pour sin(x), erreur d'exécution, récupération d'une ressource allouée par la fonction ou possédée par une structure de données), il reste malgré tout impossible de s'en passer tout à fait
Lorsque tu veut effectuer un calcul, par exemple, il est logique et cohérent d'assigner la valeur de retour de la fonction à une variable (val = sin(x))
Si tu veux tester la réussite d'une fonction afin de décider de ce qu'il faut faire (if( foo()==true)), tu n'a pas le choix non plus
Si tu veux accéder à une valeur possédée par une structure de donnée
1 2 3 4 5 6 7 8 9 10 11 12
| class MaClass
{
public:
std::string const& name() const
{
return mname;
}
private:
std::string mname;
};
std::cout<<obj.name()<<std::endl; |
tu ne dispose que du retour de fonction
Et il est enfin bien plus facile de travailler sur un code proche de
Type* ptr=doAllocation();
que sous la forme d'un code proche de
1 2
| Type* ptr;
doAllocation(&ptr); |
ne serait-ce que parce que la deuxième version implique (dans la fonction doAllocation) la présence d'une indirection supplémentaire (et ce, même si tu peux envisager de passer une référence sur un pointeur)
Au final, on se rend compte qu'il y a des cas dans lesquels tu peux effectivement te passer de la valeur de retour, mais que, dans une grande majorité des cas, il te faudra utiliser la valeur de retour de fonction dans la fonction qui l'appelle
Partager