c++ 右值引用
右值引用
左值引用
常规引用,一般表示对象的身份。
右值引用(重点)
右值引用就是必须绑定到右值(一个临时对象、将要销毁的对象)的引用,一般表示对象的值。
右值引用可实现转移语义(Move Sementics)和精确传递(Perfect Forwarding),它的主要目的有两个方面:
消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。
能够更简洁明确地定义泛型函数。
当声明了一个或多个特殊的成员函数(析构,拷贝构造,移动构造,拷贝赋值运算符,移动运算符)的时候,通常需要声明这些所有的函数,这称为“五规则”,可以为他们提供显示实现,也可以显示默认(=default)0或删除(=delete)他们。
引用折叠
X& &、X& &&、X&& & 可折叠成 X&
X&& && 可折叠成 X&&
例如:
有名称的右值引用 ,如右值引用参数,本身就是左值,因为它具有名称。例如void handleMessage(std::string&& Message) 中的message就是一个左值。
如果将临时变量赋值给右值引用,那么只有右值引用在作用域内,临时值的生命周期就会被延长。