Lvalues et Rvalues
Chaque expression C++ est une l-value ou une valeur rvalue.Une l-value fait référence à un objet qui rend persistantes au delà d'une expression unique.Vous pouvez considérer une l-value comme objet qui a un nom.Toutes les variables, y compris les variables non modifiables (d'const), sont des valeurs lvalues.Une valeur rvalue est une valeur temporaire qui ne sont pas persistantes au delà de l'expression qui l'utilise.Pour mieux comprendre la différence entre les valeurs lvalues et des rvalues, considérez l'exemple suivant :
// lvalues_and_rvalues1.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main()
{
int x = 3 + 4;
cout << x << endl;
}
Dans cet exemple, x est une l-value car elle rend au delà de l'expression qui le définit.L'expression 3 + 4 est une valeur rvalue car elle prend une valeur temporaire qui ne sont pas persistantes au delà de l'expression qui le définit.
L'exemple suivant illustre plusieurs utilisations correctes et incorrectes des valeurs lvalues et des rvalues :
// lvalues_and_rvalues2.cpp
int main()
{
int i, j, *p;
// Correct usage: the variable i is an lvalue.
i = 7;
// Incorrect usage: The left operand must be an lvalue (C2106).
7 = i; // C2106
j * 4 = 7; // C2106
// Correct usage: the dereferenced pointer is an lvalue.
*p = i;
const int ci = 7;
// Incorrect usage: the variable is a non-modifiable lvalue (C3892).
ci = 9; // C3892
// Correct usage: the conditional operator returns an lvalue.
((i < 3) ? i : j) = 7;
}
[!REMARQUE]
Les exemples de cette rubrique illustrent l'utilisation correcte et incorrecte lorsque des opérateurs ne sont pas surchargés.Lors de la surcharge des opérateurs, vous pouvez effectuer une expression telle qu' j * 4 une l-value.
L-value et le rvalue des termes sont souvent utilisés lorsque vous faites référence aux références d'objet.Pour plus d'informations sur les références, consultez Déclarateur de référence lvalue : et et le Déclarateur de référence Rvalue : &&.