Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Références Rvalue et Lvalue | Section
Pointeurs et Références en C++

bookRéférences Rvalue et Lvalue

Glissez pour afficher le menu

Lvalues et Rvalues

En C++, lvalue et rvalue sont deux catégories fondamentales d'expressions :

  • Lvalue : objet ou emplacement mémoire qui possède un nom et peut apparaître à gauche d'une affectation ;
  • Rvalue : valeur temporaire ou littérale qui ne possède pas d'adresse mémoire persistante et apparaît généralement à droite d'une affectation.

Exemples :

int x = 10;      // x is an lvalue, 10 is an rvalue
x = 20;         // x (lvalue) can be assigned a new value (rvalue 20)

Références Lvalue

Une référence lvalue permet de créer un alias pour une variable existante (une lvalue). Elle se déclare avec un seul & :

int a = 5;
int& ref = a;   // ref is an lvalue reference to a
ref = 8;        // changes the value of a to 8
  • Les références lvalue ne peuvent pas se lier à des rvalues (temporaires ou littéraux).

Références Rvalue

Une référence rvalue permet de lier une référence à une valeur temporaire (une rvalue). Elle se déclare avec && :

int&& temp = 42; // temp is an rvalue reference bound to the temporary value 42
  • Les références rvalue ne peuvent pas se lier à des lvalues (variables nommées).
  • Elles sont utiles pour optimiser le code, par exemple en déplaçant des ressources au lieu de les copier.

Règles de liaison des références

  • Les références lvalue (&) se lient aux lvalues.
  • Les références rvalue (&&) se lient aux rvalues.

Exemple :

int x = 7;
int& lref = x;      // valid: lref binds to lvalue x
// int& lref2 = 8;  // error: cannot bind lvalue reference to rvalue

int&& rref = 8;     // valid: rref binds to rvalue 8
// int&& rref2 = x; // error: cannot bind rvalue reference to lvalue

Comprendre ces concepts permet d'écrire un code C++ plus sûr et plus efficace, en particulier lors de l'utilisation de fonctionnalités modernes comme la sémantique de déplacement.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 12

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Section 1. Chapitre 12
some-alt