C++引用、左值和右值
目录一引用1函数参数引用传递2引用型变量3函数返回引用型二左值和右值1左值和右值2常见的左值和右值1变量、字面量2表达式3else3纯右值、将亡值4取址和解地址5引用和const5move6右值引用7转发引用、完美转发三拷贝构造和移动构造1类默认生成的拷贝构造和移动构造函数2noexcept3vector的移动扩增一引用1函数参数引用传递#includeiostream using namespace std; void f(int x) { x--; } int main() { int x3; f(x); coutx; return 0; }输出2常见错误void f(int x) { x--; } int main() { f(3); return 0; }2引用型变量#includeiostream using namespace std; int main() { int x3; int x2x; x2; coutx; return 0; }输出4常见错误int main() { int x 3; return 0; }3函数返回引用型#includeiostream using namespace std; int f(int arr[],int id) { if(idsizeof(arr)/sizeof(int))id0; return arr[id]; } int main() { int arr[]{1,2,3}; f(arr,1); f(arr,10); coutarr[0]arr[1]arr[2]; return 0; }输出233二左值和右值1左值和右值1左值就是有内存地址的可以用取地址右值是没有内存地址的也就不能取址。2非const的左值可以放在赋值运算符的左边const左值不行右值不行。int x 1; // 正确x是左值1是右值 1 x; // 错误 int a x; // 正确, a是左值 a 1 0; // 错误a1是右值3左值和右值描述的其实是变量是否作为一个对象保存在计算机中和存储的位置是不是在内存中没有绝对的关系。比如左值变量用register修饰虽然保存在寄存器中但仍然是左值。而如果对register变量取址那么它一开始就不会被放入寄存器。4右值分为纯右值、将亡值。2常见的左值和右值1变量、字面量变量是左值const变量是const左值。string字面量是const左值其他字面值是右值。2表达式有的表达式产生的是左值有的表达式产生的是右值。int main() { int x 1, y 2; x 1; // 右值 x y; // 右值 x; //左值引用 x; // 右值 x; // 右值 x1; // 左值引用 coutx; // 左值引用 int* a; *a; // 左值 a 1; // 右值 *(a 1); // 左值 return 0; }3else一般匿名变量指的就是表达式产生的右值但也不绝对例如*(a 1)这个匿名变量就是左值。函数是左值。左值对象的成员是左值。3纯右值、将亡值纯右值字面量、运算表达式、非引用的函数调用将亡值右值引用的函数调用4取址和解地址取址 是根据左值得到右值解地址 * 是根据左值或者右值得到左值。即取址 只能用于左值而 * 都可以。5引用和const 作为引用时是可以用于右值的。void f(const int x) { cout x; } int main() { f(3); return 0; }即非const的左值引用、const的左值和右值引用都是可以的非const的右值引用是不行的。而这居然是可以的void f(const int constant) { cout constant; const int* const_p constant; int* modifier const_castint*(const_p); (*modifier); cout constant; } int main() { f(3); return 0; }输出34而如果是这样void f(const int constant) { const int* const_p constant; int* modifier const_castint*(const_p); (*modifier); } int main() { const int x 3; f(x); cout x; return 0; }输出3说明参数相当于是按值传递的。换个角度看f(3)其实是右值引用f(x)是左值引用。5movemove函数可以实现把左值换成右值template class _Ty _NODISCARD constexpr remove_reference_t_Ty move(_Ty _Arg) noexcept { // forward _Arg as movable return static_castremove_reference_t_Ty(_Arg); }其实也就是把一个变量本身作为返回值函数的返回值自然就是右值。6右值引用用做单目运算符时表示右值引用。用Compiler Explorer可以在线编译代码。下面2个代码的汇编是一样的void f(int constant) { return; } int main() { f(3); return 0; }void f(const int constant) { return; } int main() { f(3); return 0; }对于右值其实只是没有给它取名字而已和左值变量的主要区别在于内存而在寄存器处对于计算来说是一样的。而右值引用这个新语法使得我们可以像左值引用一样直接引用一个变量而不用copy从而高效引用右值这就是移动语义、完美转发。从网上盗了一张图7转发引用、完美转发1转发引用这个符号在 C 中身兼两职当 独立出现时如 int、MyClass它是右值引用。当 出现在模板推导上下文中如 templatetypename T void f(T arg)它被称为转发引用2完美转发前面提到了完美转发这里再做一个辨析。右值引用是一种数据类型而完美转发是一种编程技巧。具体来说完美转发依赖于转发引用和std::forward三拷贝构造和移动构造1类默认生成的拷贝构造和移动构造函数参考六个默认函数2noexcept析构函数、移动构造函数、移动赋值运算符、swap函数一般不允许抛出异常。3vector的移动扩增vector添加元素时可能会发生空间倍增。发生倍增时可能发生元素移动也可能发生元素拷贝。如果元素类型的移动构造函数有noexcept即保证了不会抛出异常那么就采用移动的方式否则就采用拷贝的方式。

相关新闻

2026年柯基护关节狗狗羊奶粉实测:5款产品横评,专宠专用vs通用款优势在哪?

2026年柯基护关节狗狗羊奶粉实测:5款产品横评,专宠专用vs通用款优势在哪?

2026柯基护关节狗狗羊奶粉实测:5款产品横评,专宠专用vs通用款差距有多大 根据派读宠物行业大数据平台2025年发布的《中国宠物营养消费行为调研》,国内宠物羊奶粉市场规模已达47.2亿元,年增速稳定在18%以上;其中针对特定…

2026/7/23 17:42:17 阅读更多 →
AI合同解析技术:效率与人工核实的平衡

AI合同解析技术:效率与人工核实的平衡

1. 项目概述:AI合同解释功能的行业价值与局限 上周测试DocuSign新推出的AI合同解释功能时,我特意找了一份23页的跨国采购协议进行验证。系统在12秒内完成了全文解析,准确标注出关键条款的位置和潜在风险点,但当我翻到第17页的赔偿…

2026/7/23 17:42:17 阅读更多 →
大模型学习资源包与零基础转行AI工程师全攻略

大模型学习资源包与零基础转行AI工程师全攻略

1. 大模型学习资源包与转行攻略概述2025年的大模型技术发展已经进入深水区,从最初的文本生成到现在的多模态交互,AI技术正在重塑整个就业市场。作为一名从传统开发转型到大模型领域的技术人,我深刻理解零基础学习者面临的困惑:海量…

2026/7/23 17:42:17 阅读更多 →

最新新闻

2026新手AI写小说入门指南:实操方法+工具推荐(附使用技巧)

2026新手AI写小说入门指南:实操方法+工具推荐(附使用技巧)

不少人心里都藏着写小说的念头:脑海里有鲜活的角色、曲折的剧情,可真要打开文档落笔,却处处卡壳——世界观怎么构建才不会前后矛盾?人物怎么塑造才不会单薄扁平?剧情怎么推进才不会拖沓平淡? 很多新手就困…

2026/7/23 17:59:23 阅读更多 →
回溯题目:单词接龙 II

回溯题目:单词接龙 II

文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析题目 标题和出处 标题:单词接龙 II 出处:126. 单词接龙 II 难度 8 级 题目描述 要求 字典 wordList\texttt{wordList}wordList 中从开始单词 beginWord\texttt{…

2026/7/23 17:59:23 阅读更多 →
告别失真与延迟!2024年唯一支持实时GPU加速的AI音频引擎曝光(内测资格仅剩83席)

告别失真与延迟!2024年唯一支持实时GPU加速的AI音频引擎曝光(内测资格仅剩83席)

更多请点击: https://intelliparadigm.com 第一章:AI音频处理工具推荐 近年来,AI驱动的音频处理工具在语音增强、音乐分离、语音转文字、音效生成等场景中展现出强大能力。以下工具均经过实际测试,兼顾开源友好性、API稳定性与本…

2026/7/23 17:59:23 阅读更多 →
每天省下2.4小时的AI办公组合拳:微软Power Automate×钉钉智能体×本地化知识库(限免调试包仅开放72小时)

每天省下2.4小时的AI办公组合拳:微软Power Automate×钉钉智能体×本地化知识库(限免调试包仅开放72小时)

更多请点击: https://intelliparadigm.com 第一章:AI办公自动化的核心价值与落地瓶颈 AI办公自动化正从概念验证快速迈向规模化应用,其核心价值在于重构人机协作范式——将重复性高、规则明确、跨系统协同频繁的办公任务交由AI代理持续执行&…

2026/7/23 17:59:23 阅读更多 →
随身wifi刷openwrt变软路由--103s没网的解决

随身wifi刷openwrt变软路由--103s没网的解决

1. 刷入openwrt系统前,在备份文件里面找到下面四个文件,解压出来,将后缀改为.bin,放入openwrt系统包.2. 将备份文件image目录下文件夹解压出来,传入棒子,重启,即可.

2026/7/23 17:59:23 阅读更多 →
腾讯多模态智能鉴伪系统解析与金融应用实践

腾讯多模态智能鉴伪系统解析与金融应用实践

1. 项目背景与行业需求 在数字内容爆发式增长的今天,多媒体内容的真伪鉴别已成为互联网安全领域的核心挑战。腾讯安全此次上线的多模态智能鉴伪系统,正是针对这一痛点推出的行业级解决方案。作为项目合作方,中电金信凭借在金融科技领域积累的…

2026/7/23 17:58:22 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻