一个左值表示表达式结束后依然存在的对象。它指向一个具体的内存位置,并且你可以取得其地址。通常情况下,左值表达式可能出现在赋值操作的左侧。
一个右值通常是暂时的并且不会长时间存在,它不能被赋予另一个值。右值通常是直接的数据值或者无法通过标识符直接访问的临时对象。
不同点:
- 身份: 左值具有明确的内存地址,而右值通常没有固定的内存地址。
- 持久性: 左值代表长期存在的对象,右值代表临时或即将销毁的对象。
- 可移动性: 右值可以被移动,而左值通常不能,除非显式地转换成右值引用。
- 引用类型: 可以声明左值引用指向左值(
T&
),而右值引用(T&&
)可以绑定到右值上,优化资源使用。