C++知识点——引用

举报
小糖饼最甜呀 发表于 2022/04/25 23:45:24 2022/04/25
【摘要】 今天看到了这样一段类似的代码。// 代码示例QSet<mystruct *> &&dataSet = getDataSet();如果对于C++新特性不是很了解的话,应该会对&&产生疑问。&&是什么意思?这是引用吗?引用不是只有一个&吗?其实,这是在C++11标准中新引入的另一种引用方式——右值引用。本文我们来整体认识一下左值引用与右值引用。 左值与右值先来简单说一下左值和右值。左值:可以出现...

今天看到了这样一段类似的代码。

// 代码示例
QSet<mystruct *> &&dataSet = getDataSet();

如果对于C++新特性不是很了解的话,应该会对&&产生疑问。&&是什么意思?这是引用吗?引用不是只有一个&吗?

其实,这是在C++11标准中新引入的另一种引用方式——右值引用
本文我们来整体认识一下左值引用与右值引用。

左值与右值

先来简单说一下左值和右值。
左值:

可以出现在赋值运算符左边的表达式,常见的左值比如变量。英文简写时:lvalue,目前被解释成location value,表示可寻址。

右值:

只能出现在赋值运算符的右边,而不能出现在左边的表达式,像是常量等都是右值。英文简写是:rvalue,目前被解释成read value,表示可读。

左值和右值的区别:

左值是可以寻址的,而右值不能对寻址。
左值是可以被修改的,而右值不能被修改。

左值引用与右值引用

再来说一下左值引用与右值引用。
左值引用:

使用符号“&”表示,左值引用是我们一开始接触的引用方式。

代码示例:

int b = 10;
int &a = b;

右值引用:

使用符号“&&”表示,这是C++11 标准新引入了另一种引用方式。

代码示例:

int &&a = 10
  • 右值引用与左值引用一样,也必须进行初始化操作,且只能使用右值进行初始化。
  • 右值引用其实是一个左值,也可以进行修改。

常量左值引用:
再介绍一下常量引用:

常量左值引用,与左值引用一样,可以引用左值;但是除了可以绑定左值外,还与右值引用一样,可以绑定右值,只读无法修改。
常量左值引用可以绑定非常量左值、常量左值或者右值。在绑定右值的时候,与右值引用一样,能够将右值的生命期延长。

代码示例:

int b = 10;
const int &a = b;
const int &c = 10;

引用使用总结:
type代表类型:

  • 左值引用,使用Type&表示, 只能绑定左值;
  • 右值引用,使用Type&&表示,只能绑定右值;
  • 常量左值引用,使用const Type&表示, 既可以绑定左值又可以绑定右值,但是无法修改;

如有问题,欢迎指出~~

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。