Si une fonction renvoie un int, peut-il être attribué par une valeur int? Je ne vois pas que cela fait trop de sens pour affecter une valeur à une fonction.
int& f() {} f() = 1;
4 Réponses :
Ce n'est pas limité à INT uniquement, mais pour les types primitifs, il n'ya pas de point de le faire. C'est utile lorsque vous avez vos classes p>
Voulez-vous dire qu'il n'y a pas de point dans le retour d'une référence à un type primitif? Alors, des choses comme opérateur [] code> de
vecteur
Il y a beaucoup de points de faire (si par "cela", vous voulez dire retourner une référence) - si vous avez un std :: vecteur
Dans le contexte de son exemple
La première fonction renvoie une valeur entière de valeur, qui est une valeur R (forte> R-R-Value forte>. Vous ne pouvez pas attribuer à une valeur R en général. La seconde f () renvoie une référence à un entier, qui est une valeur L - de sorte que vous pouvez l'affecter.
int& f() { int a = 4; return a; }
Pourriez-vous expliquer pourquoi la valeur de retour est une valeur R?
La valeur de retour d'une fonction n'est pas une variable C ++ appropriée, telle que int i; code>. C'est juste une valeur temporaire. Il ne représente pas un emplacement de mémoire.
@skydoor, il peut être résumé par "Vous ne pouvez attribuer qu'aux objets" i>. Dans votre appel, la fonction renvoie une valeur qui ne correspond pas à un objet: l'entier représente juste i> une valeur abstraite. Si vous aviez, par exemple, renvoyé un std :: string code>, la valeur renvoyée (qui est en fait une valeur R) correspondre à un objet de chaîne, et vous pourrait i> Attribuez-le. Il en va de même pour une valeur de retour
int & code>. Dans ce cas, la "valeur" renvoyée (qui est une valeur L) correspond à un objet int objet i> et que vous pouvez l'affecter. Un objet est nécessaire, car une affectation modifie un état stocké.
Si une fonction renvoie un objet par valeur, l'affectation est possible, même si l'appel de la fonction est une r devalue. Par exemple:
some_function(++list.begin());
C'est un cas commun? Peux-tu me donner un exemple?
Bien que je comprends que c'est juste un exemple, remarquez que ++ list.begin () code> n'est pas tenu de fonctionner. L'opérateur peut être implémenté comme une fonction libre qui accepte une référence non-Const et ne parviendra pas à se lier à l'itérateur temporaire.
Merci, je ne me souviens jamais de quels opérateurs ont aux fonctions membres et qui peuvent être des fonctions libres.
Quel serait le point d'affecter une valeur à une fonction? Pourquoi ne pas utiliser une variable à la place?