Lvalue和Rvalues

每个 C++ 表达式是 lvalue 或 rvalue。 左值是指在单个表达式。仍存在的对象。 可以将左值作为具有名称的对象。 所有变量,包括不能更改 (const) 变量,是 lvalue。 rvalue 不在表达式外部保留使用它的一个临时值。 为了更好地了解 lvalue 和 rvalues 之间的区别,请考虑以下示例:

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

在此示例中, x 是左值,因为它在定义它的表达式外部保留。 该表达式 3 + 4 是 rvalue,因为它计算为 " 不在表达式外部保留定义它的一个临时值。

下面的示例演示 lvalue 和 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。

,当引用对象引用时,术语 " 左值 和 rvalue 常用。 有关引用的更多信息,请参见 左值引用声明:&Rvalue引用声明:&&

请参见

参考

基本概念

左值引用声明:&

Rvalue引用声明:&&