Avertissement du compilateur C ++ - retour de la variable locale
Je suis simplement en train d'essayer de surcharger un opérateur + et je reçois ce message d'avertissement du compilateur
reference to local variable 'tmp' returned
Voici le code pour la surcharge
const Int& Int::operator+(const Int& p) const
{
Int tmp = value + p.value;
return tmp;
}
Ici est la classe
class Int{
int value;
public:
Int() {} //default constructor
Int(int v) : value(v) {}
Int& operator=(const Int&);
const Int& operator+(const Int&) const;
};
source d'informationauteur trikker
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas retourner une référence à une variable locale. À l'intérieur de la
operator+()
fonction, vous êtes en train de créer une variable locale appeléetmp
. Il sera détruit dès que la fonction se termine. Vous ne pouvez pas retourner une référence à cette variable, car il n'existe plus lorsque l'appel de la fonction récupère la valeur de retour.Changer votre définition de la fonction:
Qu'il serait de construire sans mises en garde et fonctionnent très bien aussi.
Ce que vous essayez de faire est de retourner une référence à un emplacement mémoire qui ne sera pas valide au moment où vous le retourner.
La variable tmp disparaîtra quand elle est hors de portée (par exemple, lorsque l'opérateur+ est fini).
Parce que votre type de retour est de type Int&, pas la valeur de tmp est retourné au "return tmp", mais une référence à la tmp. Ce n'est pas correct, car la tmp n'existe plus après la méthode est fini!!!
Solution: Ne pas revenir en tant que référence, mais comme Int
tmp
a une classe de stockage deauto
et disparaîtra lorsque nous quitter. La réponse est à préciser statique.Le stockage attribué à
tmp
restera réservée pour la durée du programme.