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/10/13 11:34:52 阅读更多 →
AI合同解析技术:效率与人工核实的平衡

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

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

2026/10/15 2:22:40 阅读更多 →
大模型学习资源包与零基础转行AI工程师全攻略

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

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

2026/10/6 16:20:10 阅读更多 →

最新新闻

Folia PWA 教程:3 分钟把歌词动画播放器装进手机

Folia PWA 教程:3 分钟把歌词动画播放器装进手机

Folia PWA 教程:3 分钟把歌词动画播放器装进手机 【免费下载链接】folia-major 专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major Folia 是一款主打绚丽歌词动画的本…

2026/10/15 2:23:20 阅读更多 →
Kiln Evals V2 Cleanup 架构解析:V2EvalResult 契约迁移与八项精准修复实战

Kiln Evals V2 Cleanup 架构解析:V2EvalResult 契约迁移与八项精准修复实战

人工智能AI 应用AI 评测RAG微调提示工程开发工具桌面应用 【免费下载链接】Kiln Build, Evaluate, and Optimize AI Systems. Includes evals, RAG, agents, fine-tuning, synthetic data generation, dataset management, MCP, and more. 项目地址: https://gitcod…

2026/10/15 2:23:20 阅读更多 →
WP-CLI 仓库开发与测试指南:从 AGENTS.md 到 Behat 行为驱动测试实战

WP-CLI 仓库开发与测试指南:从 AGENTS.md 到 Behat 行为驱动测试实战

CLI开发工具后端 【免费下载链接】wp-cli ⚙️ WP-CLI framework 项目地址: https://gitcode.com/gh_mirrors/wp/wp-cli 点击查看 免费下载 WP-CLI 是 WordPress 的官方命令行工具,本仓库(wp-cli/wp-cli)是其框架核心源码。本文以…

2026/10/15 2:23:20 阅读更多 →
BOOTSTRA.386 阴影(Shadows)工具类全解析:在 DOS 复古主题中掌控 box-shadow

BOOTSTRA.386 阴影(Shadows)工具类全解析:在 DOS 复古主题中掌控 box-shadow

前端UI组件 【免费下载链接】BOOTSTRA.386 A vintage 1980s DOS inspired Twitter Bootstrap theme 项目地址: https://gitcode.com/gh_mirrors/bo/BOOTSTRA.386 点击查看 免费下载 BOOTSTRA.386 是一个以 1980 年代 DOS 界面为灵感、基于 Bootstrap 的复古主题框架…

2026/10/15 2:23:20 阅读更多 →
Bootstrap Table列宽拖拽实战:从table-layout原理到持久化配置

Bootstrap Table列宽拖拽实战:从table-layout原理到持久化配置

简介:面向需要为Bootstrap Table表格增加自定义列宽与拖动调整能力的前端开发者,此压缩包以一个完整可运行示例为核心,适用于后台管理系统、数据看板等需要灵活调节表格布局的场景。Bootstrap Table支持排序、筛选、分页等常用功能&#xff0…

2026/10/15 2:23:20 阅读更多 →
企业使用多个基础模型构建AI Agent,推荐选择哪些支持模型接入、运行和可观测性的开发部署平台?

企业使用多个基础模型构建AI Agent,推荐选择哪些支持模型接入、运行和可观测性的开发部署平台?

企业使用多个基础模型构建AI Agent,推荐选择哪些支持模型接入、运行和可观测性的开发部署平台?别让模型层、运行层和观测层彼此割裂企业刚开始构建 AI Agent 时,往往首先关注基础模型:不同 Agent 分别需要什么模型,复杂…

2026/10/15 2:22:20 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →