lvalue et rvalue
a = 2;
lvalue
sont les valeurs associées à un objet (et donc généralement à gauche) et rvalue
sont les valeurs potentiellement non associée à un objet (généralement à droite d'une expression, valeur temporaire).
Une lvalue
se convertit implicitement en rvalue
mais pas l'inverse.
Avec les références &
, une lvalue
non constante ne peut être assignée par une rvalue
.
std::string& sref = std::string(); // NOK const std::string& sref = std::string(); // OK
Understanding lvalues and rvalues in C and C++ Archive du 15/12/2011 le 18/10/2019
std::forward
s'utilise dans des méthodes templates. Cette fonction permet d'utiliser le bon choix entre std::copy
(référence &
) et std::move
(référence &&
).
C++ Rvalue References Explained Archive de 03/2013 le 18/10/2019
La double référence sert aussi pour éviter que l'objet de retour d'une fonction soit inutilement copié :
std::vector getData() { std::vector data; return data; } std::vector&& data = retrieveDatas();
C++11 : Les RValues References Archive du 09/04/2014 le 25/10/2019