右移
—— 资源的转移而避免拷贝。
在 C++ 中,右值(rvalue) 是指在表达式中 无法取得持久引用 的值,通常是临时对象或常量,生命周期较短,往往在表达式结束时就会被销毁。右值是相对于**左值(lvalue)**而言的,左值是指可以被持久引用的对象(如变量)。
右值的具体内容可以包含:
字面量(如整数、浮点数等):
比如
42
、3.14
是右值,它们没有在内存中的固定位置,是编译器在需要时生成的临时值。示例:
临时对象:
某些表达式的结果是一个临时对象,通常这些对象会在表达式结束后立即被销毁,因此也被认为是右值。
比如:
函数返回的非引用类型的值:
当一个函数返回值不是引用类型时,它的返回值就是一个右值,因为它通常是一个临时的对象,在返回后不久就会被销毁。
示例:
表达式计算的临时结果:
许多操作符的计算结果是右值,例如算术运算符、逻辑运算符等的结果。
示例:
左值与右值的区别:
左值(lvalue):可以取地址的值,可以赋值给左值。它通常表示有名字的、持久存在的内存对象,例如变量或数组元素。左值可以在表达式中出现在赋值操作符的左侧。
示例:
右值(rvalue):无法取地址的临时值,它通常是表达式计算出来的中间结果或临时对象,不能在赋值操作符的左侧。
示例:
左值与右值的常见场景:
在普通赋值语句中,左值出现在赋值符号的左边,而右值则出现在右边:
C++11 引入了右值引用(
T&&
),用来处理右值,从而实现移动语义,大幅优化了对临时对象的处理效率,避免了不必要的拷贝。
小结:
右值 是临时、短期存在的值,无法被引用,通常是字面量、函数返回的非引用值、表达式的中间结果等。
通过 C++11 的右值引用特性,右值可以用于实现高效的移动操作,优化程序性能。
Last updated