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/8/25 12:51:17 阅读更多 →
AI合同解析技术:效率与人工核实的平衡

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

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

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

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

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

2026/8/23 16:15:53 阅读更多 →

最新新闻

AI×低代码:企业数字化转型的黄金搭档

AI×低代码:企业数字化转型的黄金搭档

最近跟几个创业圈的朋友聊天,大家不约而同都在感叹:现在做个系统,需求变得太快了!今天刚上线一个审批流程,明天又要加个数据看板。传统的开发模式,一个需求排期就得好几周,等上线了,…

2026/8/27 2:10:57 阅读更多 →
MATLAB实现NACA翼型参数化生成与可视化:从公式到工程应用

MATLAB实现NACA翼型参数化生成与可视化:从公式到工程应用

1. 项目缘起:从一张草图到精确的翼型曲线在任何一个与流体力学或飞行器设计沾边的工程领域,翼型都是一个绕不开的核心概念。无论是设计一架无人机、优化风力发电机叶片,还是分析汽车的气动外形,你首先需要的就是一个能准确描述物体…

2026/8/27 2:10:57 阅读更多 →
9大网盘直链解析免费工具LinkSwift:三步装好极速下载

9大网盘直链解析免费工具LinkSwift:三步装好极速下载

9大网盘直链解析免费工具LinkSwift:三步装好极速下载 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…

2026/8/27 2:10:57 阅读更多 →
免费解锁 Wand 游戏修改器全部高级功能

免费解锁 Wand 游戏修改器全部高级功能

免费解锁 Wand 游戏修改器全部高级功能 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wand-Enhancer 是一个开源的本地补丁工具,帮你免…

2026/8/27 2:10:57 阅读更多 →
obs-multi-rtmp 多平台同时推流教程:3个平台共用1套编码

obs-multi-rtmp 多平台同时推流教程:3个平台共用1套编码

obs-multi-rtmp 多平台同时推流教程:3个平台共用1套编码 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp obs-multi-rtmp 是一个免费开源的 OBS 插件:在 OBS 里加…

2026/8/27 2:10:57 阅读更多 →
XUnity.AutoTranslator 实战指南:3 个配置项跑通 Unity 游戏实时汉化

XUnity.AutoTranslator 实战指南:3 个配置项跑通 Unity 游戏实时汉化

XUnity.AutoTranslator 实战指南:3 个配置项跑通 Unity 游戏实时汉化 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator 是一个运行在 Unity 游戏内部的实时汉化插件。它挂…

2026/8/27 2:09:57 阅读更多 →

日新闻

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

2026/8/27 0:00:51 阅读更多 →
网盘直链下载助手5分钟解析八大网盘真实地址

网盘直链下载助手5分钟解析八大网盘真实地址

网盘直链下载助手5分钟解析八大网盘真实地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅雷云盘 / 夸…

2026/8/27 1:06:27 阅读更多 →
从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南

从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南

从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 Arduino ESP32 是乐鑫官方的 ESP32 系列 Ardui…

2026/8/27 1:06:27 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →