web-dev-qa-db-fra.com

Conversion de Rvalue en lvalue?

Pourquoi il n'est pas possible de convertir rvalues ​​en lvalues? Il est cependant possible de faire une conversion dans la direction opposée. Techniquement, les valeurs ont une adresse mémoire, n'est-ce pas?

15
user8194556

Vous pouvez:

int&& x = 3;

x est maintenant une lvalue. Un soi-disant 'rvalue-reference' peut se lier à un temporaire, mais tout ce qui a un nom est une lvalue, donc vous devez le forward<>() si vous besoin de sa valeur en retour.

Notez qu'en liant un temporaire à une rvalue-reference (ou une référence const) vous prolongez sa durée de vie. Techniquement, une distribution est possible, mais n'est pas recommandée, car les temporaires ont une durée de vie courte, vous obtenez donc généralement une référence pendante.

11
sp2danny