右值的基本概念
- 在 C++ 中,右值(rvalue)是一个表达式,它要么是一个字面常量(例如
10
、3.14
、'a'
),要么是一个临时对象(例如函数返回值,当函数返回一个非引用类型的值时,会产生一个临时对象)。右值代表的是一个不能被赋值的值,通常位于赋值运算符(=
)的右边。 - 例如
int a = 10; // 这里的10是右值
- 与右值相对的是左值(lvalue),左值是一个具有持久存储的对象,可以在程序中通过名字访问,并且可以出现在赋值运算符的左边。例如上面代码中的
a
就是左值。
右值的分类
-
纯右值(prvalue)
- 纯右值主要包括字面常量和返回非引用类型的函数调用表达式。例如:
int func() { return 5; } int main() { int a = func(); // func()的返回值是纯右值 int b = 3.14; // 3.14是纯右值 return 0; }
- 纯右值主要包括字面常量和返回非引用类型的函数调用表达式。例如:
- 这些纯右值在表达式求值后就不再存在了,它们只是为了初始化其他对象或者参与表达式运算而临时存在的值。
-
将亡值(xvalue)
- 将亡值是一种特殊的右值,它与右值引用相关。当一个对象即将被销毁,但还能被移动(move)时,就会产生将亡值。例如,当使用
std::move
函数将一个
- 将亡值是一种特殊的右值,它与右值引用相关。当一个对象即将被销毁,但还能被移动(move)时,就会产生将亡值。例如,当使用