在 C++ 中,左值(lvalue) 和 右值(rvalue) 是表达式的基本属性,它们决定了表达式能否被赋值、取地址等操作。
1. 核心定义
左值(lvalue)
- 特点:表示一个具名的、持久的对象,可位于赋值语句左侧。
- 示例:
int x = 42; // x是左值 x = 100; // 合法:左值可被赋值 int* p = &x; // 合法:左值可取地址
右值(rvalue)
- 特点:表示一个临时的、即将销毁的对象,只能位于赋值语句右侧。
- 示例:
int y = x + 1; // x+1是右值(临时表达式) 100 = y; // 非法:右值不可被赋值 int* q = &(x+1); // 非法:右值不可取地址
2. 进一步分类
C++11 引入了右值引用后,右值进一步分为:
- 纯右值(prvalueÿ