Il est possible de créer (et passer) un pointeur vers un objet temporaire, en supposant que vous savez ce que vous faites. Cependant, cela devrait être fait différemment.
Une fonction avec une valeur de retour de type sans référence renvoie rvalue. En C++, l'application de l'opérateur unaire intégré &
à une valeur est interdite. Cela nécessite une lvalue.
Cela signifie que si vous voulez obtenir un pointeur vers votre objet temporaire, vous devez le faire d'une autre manière. Par exemple, en tant que séquence de deux lignes
const string &r = f1(str);
f2(&r);
qui peut également être pliée en une seule ligne à l'aide d'un plâtre
f2(&(const string &) f1(str));
Dans les deux cas ci-dessus la fonction f2
doit accepter un paramètre const string *
. Juste un string *
comme dans votre cas ne fonctionnera pas, sauf si vous rejetez constness de l'argument (ce qui, BTW, rendra le tout encore plus laid que ce qu'il est déjà). Bien que, si ma mémoire est bonne, dans les deux cas, il n'y a aucune garantie que la référence est attachée à l'original temporaire et non à une copie. Gardez à l'esprit que la création de pointeurs vers des objets temporaires est une pratique plutôt douteuse car si les problèmes de durée de vie sont évidents. Normalement, vous devriez éviter de devoir faire cela.
Mais je suis capable d'utiliser f1() comme ceci: f1 (str) = "happy"; Ici j'utilise temporaire comme l-valeur. –
Heureux Mittal, le mot lvalue peut être un peu confus - il ne signifie plus "une valeur qui peut rester sur le côté gauche d'une affectation". lorsque vous utilisez l'opérateur '=', vous appelez en fait une fonction membre de l'objet chaîne. Vous êtes autorisé à utiliser des membres de rvalues. – avakar
Alors, que se passerait-il si la chaîne avait un opérateur explicite & {return this;}? – user168715