C++11--右值引用

右值引用的语法定义

传统的C++引用(&)使得标识符关联到左值。传统的作指示一个表达式,程序可以获取变量的地址,然后申请一个空间。而C++11的新标准中新增了右值引用 ,使用&&来表示。

左值的英文简称是lvalue,右值的英文简称是rvalue,这并不是left value 和right value的简称,而分别是locator value的缩写,意思是在内存中可明确寻址的的数据。 而rvalue指的是read value,也就是那些可以提供数据值的数据。简单来讲,可以通过两种方法来判断左值和右值:

  1. 通过“=”来判断,通常在=左边的就是左值,而右边则是右值。
  2. 通过判断是否能取地址来判断。能进行取地址处理的,则是左值,反之是右值。

在c98标准中,无法对右值进行引用,只能对左值进行引用。
举一个简单的例子:

int a=10;
int &b=a;    //正确
int &c=10;   //错误
const int &c=10;  //正确
int &&d=10;  //右值引用,正确

注意在使用右值引用的时候,和声明左值一样,右值引用也必须对变量进行初始化,且只能使用右值初始化。

int a=10;
int &&b=a;   //错误,左值初始化
int &&c=10;   //正确,右值初始化
c=100;   //正确,c的值被修改

右值引用的使用场景

移动语义

在之前的C++中,要复制一个对象,只能调用拷贝构造函数把这些所有的内存复制一遍发送过去。而移动语义,就是将原本的内存块保存起来,让另一块内存和此块内存相关联,而不是以拷贝构造的方式传送。简单来讲,移动语义就是将一些临时资源的内存占为己用,提高效率,降低了临时对象开销内存之后又释放内存的开销。

而实现移动语义,就是让编译器直到什么时候复制,什么时候不需要,这恰好需要右值引用来发挥作用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值