请你详细介绍一下C++11中的右值引用新特性。

[2] 右值引用:

C++中,左值通常指可以取地址,有名字的值就是左值,而不能取地址,没有名字的就是
右值。而在指C++11中,右值是由两个概念构成:将亡值和纯右值。纯右值是用于识别临
时变量和一些不跟对象关联的值,比如1+3产生的临时变量值,2、true等,而将亡值通常
是指具有转移语义的对象,比如返回右值引用T&&的函数返回值等。

C++11中,右值引用就是对一个右值进行引用的类型。由于右值通常不具有名字,所以我们一般只能通过右值表达式获得其引用,比如:
T && a=ReturnRvale();
假设ReturnRvalue()函数返回一个右值,那么上述语句声明了一个名为a的右值引用,其值等于ReturnRvalue函数返回的临时变量的值。
基于右值引用可以实现转移语义和完美转发新特性。

转移语义:

	对于一个包含指针成员变量的类,由于编译器默认的拷贝构造函数都是浅拷贝,
	所有我们一般需要通过实现深拷贝的拷贝构造函数,为指针成员分配新的内存
	并进行内容拷贝,从而避免悬挂指针的问题。

完美转发:

完美转发是指在函数模板中,完全依照模板的参数的类型,将参数传递给函数模
板中调用的另一个函数,即传入转发函数的是左值对象,目标函数就能获得左值
对象,转发函数是右值对象,目标函数就能获得右值对象,而不产生额外的开销
。因此转发函数和目标函数参数一般采用引用类型,从而避免拷贝的开销。其次
,由于目标函数可能需要能够既接受左值引用,又接受右值引用,所以考虑转发
也需要兼容这两种类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N1314N

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值