Lvalue e di valori rvalue
Ogni espressione C++ è un lvalue o un rvalue.Un lvalue fa riferimento a un oggetto che viene mantenuto oltre una sola espressione.È possibile considerare un lvalue come oggetto che ha un nome.Tutte le variabili, inclusi non modificabile (const) variabili, sono lvalue.Un rvalue è un valore temporaneo che non viene mantenuto oltre l'espressione che utilizza.Per comprendere la differenza tra un lvalue e i di valori rvalue, si consideri l'esempio seguente:
// lvalues_and_rvalues1.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main()
{
int x = 3 + 4;
cout << x << endl;
}
in questo esempio, x è un lvalue perché viene mantenuto oltre l'espressione che lo definisce.l'espressione 3 + 4 è un rvalue perché restituisce un valore temporaneo che non viene mantenuto oltre l'espressione che lo definisce.
Nell'esempio seguente vengono illustrati diversi utilizzi corretti e non corretti di lvalue e i di valori rvalue:
// 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;
}
[!NOTA]
Gli esempi di questo argomento è illustrato l'utilizzo corretto e non corretto quando gli operatori non sono sottoposti a overload.Esegue l'overload degli operatori, è possibile utilizzare un'espressione come j * 4 un lvalue.
i termini lvalue e rvalue essere spesso utilizzato quando si fa riferimento ai riferimenti all'oggetto.per ulteriori informazioni sui riferimenti, vedere Dichiarazione di riferimento Lvalue: & e Dichiarazione di riferimento Rvalue: &&.