Lvalues a Rvalues
Každý výraz C++ je lvalue nebo rvalue.Lvalue odkazuje na objekt, který přetrvává po jednom výrazu.Lvalue si lze představit jako objekt, který má název.Všechny proměnné, včetně nonmodifiable (const), jsou lvalues.Rvalue je dočasné hodnotu, která není zachována za výraz, který ji používá.Chcete-li lépe pochopit rozdíl mezi lvalues a rvalues, zvažte následující příklad:
// lvalues_and_rvalues1.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main()
{
int x = 3 + 4;
cout << x << endl;
}
V tomto příkladu x je lvalue, protože přetrvává i mimo výraz, který ji definuje.Výraz 3 + 4 je rvalue, protože výsledkem dočasné hodnotu, která není zachována za výraz, který ji definuje.
Následující příklad znázorňuje několik správné a nesprávné použití lvalues a 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;
}
[!POZNÁMKA]
Příklady v tomto tématu ilustrují správné a nesprávné použití při operátory přetížené není.Podle přetížení operátory můžete provést výraz jako j * 4 lvalue.
Podmínky lvalue a rvalue se často používají při odkazu na objekt odkazy.Další informace naleznete v tématu Odkaz Lvalue Declarator: & a Rvalue referenční Declarator: & &.