在 C++ 中,左值(Lvalue)和右值(Rvalue)是理解 C++ 核心机制(尤其是 C++11 引入的移动语义和完美转发)的基础。 简单来说,这两个概念定义了表达式的“身份”和“生命周期”。 --- 1. 最基础的理解(C++98 时代) 在早期的 C++ 或 C 语言中,分类非常直观: 左值 (Lvalue - Locator value): 定义: 占用实际的内存空间、有明确的内存地址(可以取地址 )、有名字的变量或对象。 特征: 它可以出现在赋值号 的左边,也可以在右边。它的生命周期通常较长(直到离开作用域)。 例子: 变量 、解引用 、数组元素 。 右值 (Rvalue - Read value): 定义: 不占用持久的内存空间、没有可识别的内存地址、没有名字的临时值。 特征: 它只能出现在赋值号 的右边。它的生命周期极短(通常在当前语句执行完后销毁)。 例子: 字面量 、、表达式计算结果 、返回非引用的函数返回值。 代码示例: --- 2. 现代 C++ 的值类别(C++11 之后) 随着 C++11 引入了右值引用(Rvalue reference, )和移动...