Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente |
lang:cpp:rvalue [2019/10/18 09:36] – Création root | lang:cpp:rvalue [2019/10/25 14:57] (Version actuelle) – Ajout d'un usage possible des rvalues references root |
---|
| ====lvalue et rvalue==== |
| <code cpp> |
| a = 2; |
| </code> |
| |
| ''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''. |
| |
| <code cpp> |
| std::string& sref = std::string(); // NOK |
| const std::string& sref = std::string(); // OK |
| </code> |
| |
[[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}} | [[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}} | [[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é : |
| |
| <code cpp> |
| std::vector getData() |
| { |
| std::vector data; |
| return data; |
| } |
| |
| std::vector&& data = retrieveDatas(); |
| </code> |
| |
| [[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}} |