“左值”和“右值”这两个术语来自于 C/C++ 语言中的表达式分类。它们的命名源自于表达式放置的位置。
- 左值(lvalue):最初是“在赋值语句的左边的值”,即可被赋值的表达式。在 C/C++ 中,左值通常是具有名称的变量或对象,因为它们可以被取地址。
- 右值(rvalue):最初是“在赋值语句的右边的值”,即不能被赋值的表达式。右值通常是临时的、无法取地址的表达式,比如常量、临时对象、表达式的计算结果等。
这些术语实际上是根据赋值语句的形式而来的,但它们被扩展到了其他上下文中,例如函数参数、返回值等。
在 C++11 之后,右值引用和移动语义的引入使得右值变得更加重要。通过引入右值引用,C++11 提供了一种机制,使我们可以对右值进行更有效的处理,比如移动构造和移动赋值操作,这对于处理临时对象和资源管理非常有用。