您的位置:首页 > 汽车 > 时评 > 05 C++语言---左值右值

05 C++语言---左值右值

2024/10/8 3:14:22 来源:https://blog.csdn.net/qq_43812868/article/details/141925969  浏览:    关键词: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 的左值引用的形参时,右值将被绑定到右值引用的重载之上(从而,当复制与移动构造函数均可用时,以右值实参将调用它的移动构造函数,复制和移动赋值运算符与此类似)。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com