C++程序设计:右值引用

c++11新增了另一种引用 - 右值引用(rvalue reference)。

这种引用可指向右值,使用&&声明
右值引用只能引用临时变量和常量值

在C++中,左值是指表达式结束后依然存在的持久对象,右值是指表达式结束后就不再存在的临时对象.

左值
    1)左值可以取地址
    2)左值可以修改
    3)左值可以放在等号左右两边
右值
    1)右值不可以取地址
    2)右值不可以直接修改
    3)右值只能放在等号右边
    4)右值往往是没有名称的

关于右值,C++11将右值分了两类:纯右值、将亡值

纯右值: a) 非引用返回的临时变量; b) 运算表达式产生的结果; c) 字面常量

将亡值: 与右值引用相关的表达式.例如将要被移动的对象,T&&函数的返回值,std::move0的返回值

在左右值使用时有三个原则,不能违反原则,否则编译无法通过:
  原则1:右值可以赋给左值,左值不能给右值(左值权限更大)

int a = 3;  // a是左值,3是右值
int d = a;  // d和a都是左值,左值可以赋给左值
int &&d = a; × // 右值引用左值不行
int &&d = 10;  // 右值引用右值可以
int &&d = f(10);  // 右值引用右值可以

原则2:右值无法修改

int a = 10;  // 10是右值常数,无法修改

原则3:编译器允许为左值建立引用,不可以为右值建立引用

int num = 10;
int &b = num;  √  // num是左值,可以左值建立引用
int &b = 10; ×  // 10是右值,不可以右值建立引用

对右值进行修改——右值引用

1)右值引用必须要进行初始化

2)不能使用左值进行初始化

3)右值引用可以对右值进行修改

int && a;  × // 必须初始化
int num = 10;
int && a = num; × //不能使用左值进行右值初始化
int && a = 10; √ 
int &&a = 10;    // 这里的a是右值引用,其实是10

右值引用的本质就是不用拷贝的左值

引用和右值引用本质的作用都是减少拷贝。右值引用弥补了引用的不足。右值引用提高了传值返回的效率。

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值