c++中引入了 右值引用
和 移动语义
,可以避免无谓的复制,提高程序性能。有点难理解,于是花时间整理一下自己的理解。
左值、右值
C++
中所有的值都必然属于左值、右值二者之一。左值是指表达式结束后依然存在的 持久化对象,右值是指表达式结束时就不再存在的 临时对象。所有的具名变量或者对象都是左值,而右值不具名。很难得到左值和右值的真正定义,但是有一个可以区分左值和右值的便捷方法: 看能不能对表达式取地址,如果能,则为左值,否则为右值。
看见书上又将右值分为将亡值和纯右值。纯右值就是 c++98
标准中右值的概念,如非引用返回的函数返回的临时变量值;一些运算表达式,如1+2产生的临时变量;不跟对象关联的字面量值,如2,’c’,true,”hello”;这些值都不能够被取地址。
而将亡值则是 c++11
新增的和右值引用相关的表达式,这样的表达式通常时将要移动的对象、 T&&
函数返回值、 std::move()
函数的返回值等,
不懂将亡值和纯右值的区别其实没关系,统一看作右值即可,不影响使用。
示例:
左值引用、右值引用
c++98
中的引用很常见了,就是给变量取了个别名,在 c++11
中,因为增加了右值引用(rvalue reference)的概念,所以 c++98
中的引用都称为了左值引用(lvalue reference)。
c++11
中的右值引用使用的符号是 &&
,如
Original: https://www.cnblogs.com/wlzy/p/10964174.html
Author: ZYVV
Title: [转][c++11]我理解的右值引用、移动语义和完美转发
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/535098/
转载文章受原作者版权保护。转载请注明原作者出处!