大白话来理解C++11的右值引用

前言

以下是本人学习多线程时临时学到的内容,文章删删改改,发现自己对这方面理解仍然不够精确,用词也不严谨,而且十分啰嗦,但希望可以为你理解C++11的右值引用提供帮助。

左值与右值是什么?

  • 左值其实就是像变量等可以长期存在,通常出现在赋值运算符左边的东西,可以浅显地理解为就是变量。
  • 而右值相对于左值,是如字面量等表示某个值但不具有持久的身份与内存空间

用代码来解释:

int a = 42;

// a 是一个变量,在执行完上面的语句后,其仍然可以存在,属于左值
// 42 是一个字面,在上面语句结束后,存放其内容的内存会立即释放,属于右值

左值引用与右值引用

引用大家都明白,是为一个变量取一个”别名“,对引用进行修改会直接改变该变量的值,本质上是引用与原来的变量共用了同一块内存空间,其实这种”传统“的引用就是左值引用,我更喜欢理解为:"所引用的对象是一个左值"或者”对左值引用“。


int a =42; 	// 创建一个变量a
int &b = a; 	//创建了一个引用b,这里b所引用的对象是a,而a是左值,这就属于左值引用

b -= 42;		// 对b修改
cout<<a<<endl;	//a的值改变

同样的方式,右值引用其实也可以大致理解为:所引用的对象是右值,但是我们之前特意说过:右值的生命周期很短,如果在直接对一个右值创建一个引用,创建完后这个右值就会被释放,不就是引用了一个”寂寞“吗?在C++里,编译时会直接报错。

int &b = 42; // 编译错误

而不会报错的右值引用是这样的:

int && b  = 42;// 编译不会报错

你可能会疑惑,这还不是对右值创建了引用了吗?这么编译时不会出错?

类似于左值引用:“引用与变量都有对一块内存的所有权”,右值引用会先将右值对象的生命周期延长了,之后与该对象共同拥有内存的所有权。。

以下是对其的图解:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值