Поделиться через


Lvalues и Rvalues

Каждое выражение rvalue или lvalue или C++.Lvalue ссылается на объект, который сохраняет за одним выражением.Можно представить себе как lvalue объект, имеющий имя.Все переменные, включая немодифицируемое (constпеременные, lvalues).Значение rvalue временное значение, которое не сохраняет за выражением, которое использует его.Чтобы лучше понять разницу между lvalues и rvalues, рассмотрим следующий пример:

// lvalues_and_rvalues1.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main()
{
   int x = 3 + 4;
   cout << x << endl;
}

В этом примере x lvalue, поскольку оно остается за выражением, которое идентифицирует его.Выражение 3 + 4 значение rvalue, так как оно является временным значением, которое не сохраняет за выражением, которое идентифицирует его.

В следующем примере показано несколько правильных и неверным использований lvalues и 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;
}
ПримечаниеПримечание

Примеры в этом разделе демонстрируют правильный и неверное потребление, когда операторы не перегружанны.Можно перегружать операторы можно сделать выражение как j * 4 lvalue.

Термины lvalue и значение rvalue часто используется при обращении к ссылкам на объект.Дополнительные сведения о ссылках см. в разделе Декларатор ссылки Lvalue: & и Декларатор ссылки Rvalue: &&.

См. также

Ссылки

Основные понятия

Декларатор ссылки Lvalue: &

Декларатор ссылки Rvalue: &&