本文主要是介绍05 C++语言---左值右值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
c++98:
左值(lvalue) :表达式结束后依然存在的持久对象。
右值(rvalue) :表达式结束后就不再存在的临时对象。
左值-->左值引用
右值-->右值引用
C++11
拥有身份 (identity):可以确定表达式是否与另一表达式指代同一实体,例如通过比较它们所标识的对象或函数的(直接或间接获得的)地址;
可被移动:移动构造函数、移动赋值运算符或实现了移动语义的其他函数重载能够绑定于这个表达式。
纯右值:不拥有身份、可被移动
1、纯右值不具有多态:他标识的对象的动态类型始终是
2、非类非数组的纯右值不能有 cv 限定
3、纯右值不能具有不完整类型
4、纯右值不能具有抽象类类型或它的数组类型
将亡值:拥有身份、可被移动
左值:拥有身份、不可被移动
1、可以使用取地址&获取地址。可以使用赋值操作,可以初始化左值引用。
泛左值:拥有身份
1、泛左值可以通过左值到右值、数组到指针或函数到指针隐式转换转换成纯右值
2、泛左值可以是多态的:它标识的对象的动态类型不必是该表达式的静态类型。
3、泛左值可是是不完整类型。
右值:可被移动
1、右值不能由内建的取址运算符取地址
2、右值不能用作内建赋值运算符及内建复合赋值运算符的左操作数
3、右值可以用来初始化 const 左值引用,这种情况下该右值所标识的对象的生存期被延长到 该引用的作用域结尾。
4、右值可以用来初始化右值引用,这种情况下该右值所标识的对象的生存期被延长到该引用 的作用域结尾。
5、当被用作函数实参且该函数有两种重载可用,其中之一接受右值引用的形参而另一个接受 const 的左值引用的形参时,右值将被绑定到右值引用的重载之上(从而,当复制与移动构造函数均可用时,以右值实参将调用它的移动构造函数,复制和移动赋值运算符与此类似)。
这篇关于05 C++语言---左值右值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!