右值引用
概念
-
左值
可以出现在operator = 左边的
-
右值
只能出现在operator = 右边的
-
右值不可取地址
常用的标准库函数
-
std::move()
该函数只有让左值绑定到右值引用的函数上的作用,除此之外,没有任何额外的功能
使用该函数并没有任何其他作用,本身不产生优化
-
std::forward()
该函数目的是实现完美转交--即左值传递后仍然为左值,右值传递后仍然为右值
原因参照左值引用和右值引用均为左值, (也可以说是有名字的变量都为左值)
常见右值情况
-
a + b
-
临时对象
-
左值通过
std::move()
函数绑定为右值
使用场景
-
需要对右值单独进行优化,一般是使用浅拷贝
需要在右值引用的重载函数中单独实现
-
实现时需要注意传递后需要改变原变量的指向,否则右值传递后会立即销毁
如果还指向原变量内容,则原变量的内容就会被销毁,导致后续操作产生未定义行为
-