千家信息网

C++右值如何引用

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,本篇内容介绍了"C++右值如何引用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.左值和右值在我们
千家信息网最后更新 2025年02月02日C++右值如何引用

本篇内容介绍了"C++右值如何引用"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1.左值和右值

在我们之前的文章当中,介绍的都是左值引用。C++11在左值引用的基础上推出了右值引用,由于是新特性,加上使用的频率也不是很高,有一定的学习成本。

我们先把引用这个概念抛开,先来看看什么是左值什么是右值。其实很简单,左值可以取地址,位于等于号的左侧。而右值没办法取地址,位于等于号的右侧。

int a = 4;

比如我们定义了一个int型的变量a,让它的值等于4。其中a位于等于号的左侧,并且我们可以求a的地址。而4位于等于号的右侧,我们没有办法对4取地址。所以a是左值,4是右值。

再比如:

int test() {    return 4;}int a = test();

同样,a位于等于号的左侧,有办法取地址是个左值。而test()是一个临时值没办法取地址,是个右值。

所以到这里就比较清楚了,有地址的变量就是左值,没有地址的常量值、临时变量就是右值。

2.左值引用和右值引用

明白了左值、右值的概念再来看看左值引用、右值引用就简单了。左值引用顾名思义就是能够指向左值不能指向右值的引用。

int a = 4;int &b = a;  // 合法int &c = 4;  // 非法

但是左值引用也有例外,就是使用const修饰的左值引用是可以指向右值的:

const int &b = 4;

因为const修饰的引用无法再更改,所以可以指向右值。如果大家度过STL代码的话,会发现其中一些函数的入参是const &目的就是为了能够兼容传参是常量的情况。比如vector当中的push_back

void push_back (const value_type& val);

右值引用和左值引用的概念类似,也就是能够指向右值但不能指向左值的引用。为了和左值引用区别, 使用&&也就是两个&符。老实讲这个符号很令人费解,因为它和and的含义相同。

int a = 4;int &&b = 4; // 合法int &&c = a; // 非法

上面第三行代码非法的原因是c是一个右值引用,它不能指向左值。如果我们非要指向呢?也不是没有办法,可以使用std::move函数,它可以将一个左值转换成右值。

using namespace std;int a = 4;int &&c = move(a);

move函数听起来似乎是移动的意思,但其实它并没有移动变量,只不过做了一个类似于类型转换的操作。

不知道大家看到这里有没有觉得头大,其实还没有结束,还有一点很重要。即左值引用和右值引用这两者本身都是左值引用:

void test(int && tmp) {    tmp = 2333;}using namespace std;int a = 4;int &b = a;int &&c = 4;test(a); // 非法test(b); // 非法test(c); // 非法test(move(a));// 合法test(move(b));// 合法test(move(c));// 合法

C++中的引用是一个非常大的范畴,除了左值引用、右值引用之外还有非常多的细节。比如万能引用、引用折叠、完美转发等……

"C++右值如何引用"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

地址 指向 合法 办法 就是 变量 C++ 函数 概念 也就是 代码 内容 右侧 常量 情况 文章 更多 知识 学习 移动 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器连接蓝牙耳机没声音 梦幻西游普通服务器和测试服务器 服务器如何保证网络安全 世界银行数据库官网怎么登录 各语言软件开发效率 山西网络技术咨询机构 软件开发中的9大难题 数据库损坏报告 学校服务器上有独立显卡吗 广厦网络技术股份有限公司 新宜农网络技术有限公司 为什么数据库连接池 怎样自学网络技术 市地税局抓网络安全侧记 通信软件开发过程标准 吴江区一站式网络技术怎么样 北京舞蹈学院学报收录数据库 合肥OA软件开发招聘 河南仓储系统管理软件开发 常见web服务器 无锡多有米网络技术有限公司 方舟服务器宣传片台词 中石油网络安全规范 联想服务器管理口的默认密码 2021中国网络安全产业势能榜单排名 软件开发流程模型风险分析 数据库多久能学会 网络安全法司法解释第六条 软件开发文献综述模板 海康威视的软件开发岗位工资
0