====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 [[https://eli.thegreenplace.net/2011/12/15/understanding-lvalues-and-rvalues-in-c-and-c/|Understanding lvalues and rvalues in C and C++]] {{ :lang:cpp:rvalue:understanding_lvalues_and_rvalues_in_c_and_c_-_eli_bendersky_s_website_2019-10-18_09_23_48_.html |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 ''&&''). [[http://thbecker.net/articles/rvalue_references/section_01.html|C++ Rvalue References Explained]] {{ :lang:cpp:rvalue:c_rvalue_references_explained.html |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(); [[https://jobprod.com/c11-les-rvalues-references/|C++11 : Les RValues References]] {{ :lang:cpp:rvalue:c_11_les_rvalues_references_jobprod_2019-10-25_14_57_00_.html |Archive du 09/04/2014 le 25/10/2019}}