C++入门教程(四十一):左值引用和右值引用

小古银的官方网站(完整教程):http://www.xiaoguyin.com/
C++入门教程视频:https://www.bilibili.com/video/av20868986/

目录

前一篇教程所说的引用,全名叫做左值引用。以下将讲解左值和右值,还有左值引用右值引用。至于为什么要用引用,将在下一篇教程讲解。

左值和右值

区分左值和右值的简单方法:

int a = 0; // 0是值, 值没有名字所以是右值; a是变量名, 因为是名字所以是左值
int b = std::abs(1024); // 函数的返回值, 没有名字所以是右值; b是变量名所以是左值
int c = a; // a是右值, c是变量名所以也是左值

也就是说,区分左值和右值的简单方法就是这个东西有没有名字

左值引用和右值引用

左值引用就是左值的引用,即上一篇教程所说的内容,由于历史原因一般简称引用

int a = 0; // a是左值
int &b = a; // b是左值a的引用, b保存的内容发生改变时, a保存的内容也会随之改变

右值引用就是右值的引用,使用数据类型 &&来声明:

int &&a = 0; // 0是右值, 可以用右值引用来保存
int &&b = std::abs(1024); // 返回值是右值, 可以用右值引用来保存

// a虽然是右值的引用, 但是a已经是名字了, 也就是左值
// 所以要用左值引用而不能使用右值引用
int &c = a; 

因为右值引用是右值的别名,所以声明的时候也需要初始化。

然而,int &&a = 0;int a = 0;一样,int &&b = std::abs(1024);int b = std::abs(1024);一样,所以聪明的你会发现,右值引用就是只能接收右值的普通变量

右值引用并不是这样使用的,右值引用的用途,基本上都用在函数参数上,并且与左值引用进行区分,用来优化程序

使用const

const作用在左值引用:

int a = 0;
const int &b = a; // b是a的别名, 但是不能通过b来改变a的值
a = 1024; // b的值随之改变
// b = 6666; // 去掉开头注释将会报错, 因为受到const的限制, b是只读的

const作用在右值引用:

const int &&a = 0; // 实际上就是 const int a = 0;

补充知识(了解即可)

C++为了对右值进行优化,从C++11开始引入左值和右值的概念,此前并没有这样的概念,C++11前左值引用只叫做引用。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值