当前位置: 首页 > article >正文

c++超细致讲解引用

引用的概念引用 不是新定义一个变量而 是给已存在变量取了一个别名 编译器不会为引用变量开辟内存空间它和它引用的变量共用同一块内存空间。引用的表示方法类型 引用变量名 ( 对象名 ) 引用实体如果熟悉C语言的同学可能会发现引用符号()看上去就像取地址运算符()或者按位AND运算符()其实这是一个运算符重载的例子。通过重载同一个运算符将会有不同的含义。编译器会通过上下文来确定运算符的含义。除了这里所提到的其实在C中还有一些运算符重载的情况。例如* 即表示乘法又表示对指针的解引用操作即表示插入运算符又表示按位左移运算符等。代码实例12345678intmain(){//引用取别名inta 10;int b a;//定义引用类型int c b;return0;}本段代码我们可以得知a变量取了bc两个别名。我们也可以通过调试观察他们的内存通过调取内存我们可以发现a,b,c所指向的是同一块内存空间。注意 引用类型 必须和引用 实体 是 同种类型 的引用特性引用有三个特性分别是1. 引用在 定义时必须初始化2. 一个变量可以有多个引用3. 引用一旦引用一个实体再不能引用其他实体1.引用在定义的时候必须初始化由于引用是对已经存在的变量进行取别名因此使用引用时必须指定变量(初始化)。1int d;//错误未初始化2.一个变量可以有多个引用在C语法中一个变量有多个引用就类似于一个人可以有多个外号。在1.1的代码实例中变量a就有2个引用分别是b和c。3.引用一旦引用一个实体再不能引用其他实体这个也比较好理解因为引用一旦引用了一个已经存在的实体就是这个实体的别名当然不能再成为其他实体的别名。常引用与引用权限我们来观察下面这段代码他能编译成功吗1234567intmain(){//1.constintx 20;int y x;return0;}当我们编译这段代码发现编译器报出错误警告无法从“const int”转换为“int ”这是因为我们在引用的时候要遵守引用的原则引用原则:对原变量的引用权限不能放大。1.3这段代码中x变量是const修饰是一个常变量只有可读权限。而我们引用的类型是int不仅有可读权限还有可修改权限。这就造成了对原变量的权限放大。根据我们引用原则知道对原变量的引用权限是不能放大的这就是为什么这段代码会报错的原因。那我们再来看这一段代码它能编译成功吗12345678910intmain(){//2.constintx 20;constint y x;//不变//3.intc 30;constint d c;//缩小return0;}这段代码我们发现编译成功了我们也可以轻松地分析出这里的引用是遵守引用规则的我们发现权限不变或者权限缩小都是符合规则的唯一需要注意的是权限不能放大。引用的使用场景做参数123456789101112voidSwap(int x,int y){inttmp x;x y;y tmp;}intmain(){inta 0, b 1;Swap(a, b);return0;}引用可以作函数的形参x是a的别名y是b的别名。这里使用引用更加方便也更好理解。那既然以值作为函数参数和以引用作为函数参数都能解决这个问题那为什么还要使用引用来做参数呢这是因为引用的效率更高我们可以通过下面这段测试代码更加直观看出效率的差别1234567891011121314151617181920212223242526#include time.hstructA {inta[10000]; };voidTestFunc1(A a) {}voidTestFunc2(A a) {}voidTestRefAndValue(){A a;// 以值作为函数参数size_tbegin1 clock();for(size_ti 0; i 10000; i)TestFunc1(a);size_tend1 clock();// 以引用作为函数参数size_tbegin2 clock();for(size_ti 0; i 10000; i)TestFunc2(a);size_tend2 clock();// 分别计算两个函数运行结束后的时间cout TestFunc1(A)-time: end1 - begin1 endl;cout TestFunc2(A)-time: end2 - begin2 endl;}intmain(){TestRefAndValue();return0;}我们发现使用引用作为函数参数效率大大提高。以值作为参数或者返回值类型在传参和返回期间函数不会直接传递实参或者将变量本身直接返回而是传递实参或者返回变量的一份临时的拷贝因此用值作为参数或者返回值类型效率是非常低下的尤其是当参数或者返回值类型非常大时效率就更低。引用做参数的意义1.输出型参数。2.减少拷贝提高效率。做返回值首先我们来观察这段代码的返回值是什么?12345678910111213intCount(){staticintn 0;n;returnn;}intmain(){cout Count() endl;cout Count() endl;cout Count() endl;return0;}这里的结果是1 2 3因为n是局部静态的成员变量只会初始化一次虽然作用域在Count函数内部但是生命周期是全局我们可以通过调试观看他是否再执行函数的第一句传值的底层过程传值返回这个过程当中会产生一个临时变量跟传参一样如果小会用寄存器替代。传值返回的类型其实是临时变量的类型将n拷贝给临时变量再将临时变量拷贝给ret。那么为什么要设计临时变量呢直接把n给ret不好吗这是因为在当临时变量出了函数作用域之后会销毁函数栈桢也会销毁那么此时n是不能作为返回值再赋值给ret的。那么编译器就在此生成了一个临时变量把n拷给临时变量再把临时变量给ret。此时函数栈桢销毁是不会影响临时变量的。

相关文章:

c++超细致讲解引用

引用的概念引用 不是新定义一个变量,而 是给已存在变量取了一个别名 ,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。引用的表示方法类型 & 引用变量名 ( 对象名 ) 引用实体;如果熟悉C语言的同学可…...

【2026最新版|必收藏】程序员/小白入门大模型不踩坑,实战转型指南

大模型赛道持续高热,2026年行业需求更偏向“实战落地”,冗余理论型人才逐渐被市场淘汰。作为常年扎根大模型培训、带过120学员成功转型就业的训练营主理人,我的后台每天都被CSDN上的新手和转型程序员的焦虑提问刷屏,每一个都戳中痛…...

QuickLook Video:5分钟搞定macOS视频预览,让Finder支持所有视频格式

QuickLook Video:5分钟搞定macOS视频预览,让Finder支持所有视频格式 【免费下载链接】QuickLookVideo This package allows macOS Finder to display thumbnails, static QuickLook previews, cover art and metadata for most types of video files. …...

JB/T 9018-2011《自动化立体仓库设计规范》:工程师必知的技术要点

自动化立体仓库是现代物流仓储的核心装备,其设计质量直接关系到仓储效率和安全运行。JB/T 9018-2011《自动化立体仓库设计规范》作为行业重要标准,为工程设计提供了明确的技术依据。本文将重点解读规范中的关键技术要求,帮助工程师更好地理解…...

【收藏级】2026程序员转型大模型指南:小白零门槛上手,抢占AI时代红利

在程序员的技术交流群、CSDN社区、职场分享会里,“转型”依然是2026年高频热议的核心话题。当大模型技术从“概念落地”走向“规模化应用”,彻底融入企业研发全流程、日常开发场景,一个不容置疑的趋势已然清晰:懂大模型、能落地大…...

【收藏备用】2026年大模型时代,程序员必看:AI让研发飞起来,却卡在了“拍板”上

上个月我在一条AI业务线做评审,看到一幕特别“赛博”——几乎每个研发工位都开着agentic coder窗口,其中一个研发把电脑一转,语气轻松又得意: “昨天晚上我让agentic coder跑了一宿,早上起来已经出了6个可用Demo&#…...

一文了解工业相机的分类及适用场景

工业相机是机器视觉系统中的一个关键组件,其最本质的功能就是将光信号转变成有序的电信号。其成像原理与小孔成像类似,但更为复杂。当被摄物体反射的光线通过工业镜头折射后,会投射到相机的感光传感器上,这个感光传感器通常是电荷…...

抖音下载器终极指南:免费批量下载视频音乐,告别手动保存烦恼

抖音下载器终极指南:免费批量下载视频音乐,告别手动保存烦恼 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and brows…...

政治局会议重磅定调:6G纳入国家六大基础设施网络,1Tbps太赫兹通信突破引领全球

引言2026年4月28日,中共中央政治局会议明确提出,“加强水网、新型电网、算力网、新一代通信网、城市地下管网、物流网等规划建设”。当“新一代通信网”被正式写入最高决策层的政策文件,这不仅是一次简单的产业规划调整,更标志着6…...

GD32F4xx时钟树避坑指南:HXTAL选8M还是25M?AHB分频怎么设性能最优?

GD32F4xx时钟树实战解析:晶振选型与总线分频的黄金法则 在嵌入式系统设计中,时钟配置往往是最容易被低估的关键环节。当我在去年负责一个工业网关项目时,曾因为草率选择了25MHz外部晶振而遭遇产品批量返修的惨痛教训——在高温环境下&#xf…...

无需编程的智能图表设计革命:Charticulator完全指南

无需编程的智能图表设计革命:Charticulator完全指南 【免费下载链接】charticulator Interactive Layout-Aware Construction of Bespoke Charts 项目地址: https://gitcode.com/gh_mirrors/ch/charticulator 你是否厌倦了千篇一律的图表模板?是否…...

3步掌握联想笔记本BIOS隐藏设置:从黑苹果到性能优化的完整指南

3步掌握联想笔记本BIOS隐藏设置:从黑苹果到性能优化的完整指南 【免费下载链接】LEGION_Y7000Series_Insyde_Advanced_Settings_Tools 支持一键修改 Insyde BIOS 隐藏选项的小工具,例如关闭CFG LOCK、修改DVMT等等 项目地址: https://gitcode.com/gh_m…...

CompactGUI:Windows透明压缩工具的开源贡献完全指南

CompactGUI:Windows透明压缩工具的开源贡献完全指南 【免费下载链接】CompactGUI Reduce the space taken up by games and programs on disk by using native Windows APIs 项目地址: https://gitcode.com/gh_mirrors/co/CompactGUI 在数字内容日益膨胀的今…...

【紧急预警】PHP 9.0协程调度器重大变更!AI聊天机器人状态同步失效风险清单(含7个必修迁移checklist)

更多请点击: https://intelliparadigm.com 第一章:PHP 9.0异步编程与AI聊天机器人对比评测报告的定位与价值 本报告聚焦于 PHP 生态演进的关键拐点——PHP 9.0(预发布技术白皮书阶段)所引入的原生协程调度器(Swoole-n…...

3个颠覆性技巧:让macOS视频预览效率提升300%的QLVideo完全指南

3个颠覆性技巧:让macOS视频预览效率提升300%的QLVideo完全指南 【免费下载链接】QuickLookVideo This package allows macOS Finder to display thumbnails, static QuickLook previews, cover art and metadata for most types of video files. 项目地址: https:…...

ECS系统调度失衡,Burst不生效,Chunk布局碎片化——DOTS 2.0三大性能暗礁,及工业级绕行方案,仅限首批内测团队验证

更多请点击: https://intelliparadigm.com 第一章:ECS系统调度失衡,Burst不生效,Chunk布局碎片化——DOTS 2.0三大性能暗礁,及工业级绕行方案,仅限首批内测团队验证 在 Unity DOTS 2.0 实际产线部署中&…...

生成引擎优化(GEO)在提升内容创作效率与强化用户体验中的作用分析

生成引擎优化(GEO)在内容创作中的应用不仅限于提升效率,还全面提升用户体验。GEO通过数据分析帮助创作者明确用户需求,从而设计出更具针对性的内容,吸引用户的注意。此外,优化后的内容结构增强了信息的可读…...

掌握长尾关键词在SEO优化中的关键作用与策略

本文将重点探讨长尾关键词在SEO优化中的重要性及其应用策略。长尾关键词,通常由多个词组成,更加具体和具针对性,能够有效捕获特定用户的搜索意图。通过合理利用这些关键词,不仅可以提升网站在搜索引擎中的可见性,还能够…...

IDA Pro老版本兼容性急救:3步搞定Win10系统Windbg调试器报错(含WDK安装误区)

IDA Pro老版本兼容性急救:3步搞定Win10系统Windbg调试器报错 逆向工程领域的老兵们对IDA Pro一定不陌生,尤其是那些常年与恶意软件、漏洞分析打交道的安全研究人员。然而,当我们将经典的IDA 6.8 PRO搬上Windows 10的舞台时,常常会…...

零基础玩转像素语言·维度裂变器:一键生成10种文本改写方案

零基础玩转像素语言维度裂变器:一键生成10种文本改写方案 1. 像素语言维度裂变器是什么? 像素语言维度裂变器(Pixel Dimension Fissioner)是一款基于MT5-Zero-Shot-Augment核心引擎构建的文本改写工具。它将传统AI工具的工业感设…...

OrigamiSimulator:为什么WebGL折纸模拟正在颠覆传统设计流程?

OrigamiSimulator:为什么WebGL折纸模拟正在颠覆传统设计流程? 【免费下载链接】OrigamiSimulator Realtime WebGL origami simulator 项目地址: https://gitcode.com/gh_mirrors/or/OrigamiSimulator 当折纸艺术家和结构工程师还在为复杂几何模型…...

Redis如何保障集群环境下的分布式锁安全_使用Redlock算法跨多个独立主节点获取锁实例

Redlock 不适用于 Redis Cluster——因其依赖独立节点的原子多节点操作,而 Cluster 的分片、重定向和跨 slot 限制使其无法满足 Redlock 的多数派加锁前提;官方明确不推荐。Redlock 在 Redis 集群环境下不能直接保障分布式锁安全——它只适用于多个相互独…...

医疗C#系统FHIR升级迫在眉睫:2026年1月1日合规截止前,你漏掉了这3个关键HL7 R4→R5语义断层?

更多请点击: https://intelliparadigm.com 第一章:FHIR R4→R5升级的医疗合规倒计时:2026年1月1日不可逾越的临界点 美国CMS(Centers for Medicare & Medicaid Services)已正式将FHIR R5作为2026年1月1日起强制实…...

VS Code Remote-Containers 插件突然失效(v0.312+ 版本特有),官方未文档化的 breaking change 及向下兼容降级路径

更多请点击: https://intelliparadigm.com 第一章:VS Code Remote-Containers 插件突然失效(v0.312 特有)问题概览 自 VS Code Remote-Containers 插件升级至 v0.312 及更高版本后,大量用户报告容器连接中断、devcont…...

别光会编译!用Python和Notepad++手动解析.hex文件,彻底搞懂每一行数据

从侦探视角拆解.hex文件:用Python与Notepad还原二进制真相 当你按下Keil的编译按钮时,那个自动生成的.hex文件就像一份被加密的犯罪现场报告——它包含着程序运行的完整DNA,却以晦涩的十六进制符号呈现。本文将带你化身数字侦探,用…...

2026年最强B站资源下载神器:BiliTools跨平台工具箱终极指南

2026年最强B站资源下载神器:BiliTools跨平台工具箱终极指南 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …...

SteamShutdown智能关机完整指南:告别游戏下载后的能源浪费

SteamShutdown智能关机完整指南:告别游戏下载后的能源浪费 【免费下载链接】SteamShutdown Automatic shutdown after Steam download(s) has finished. 项目地址: https://gitcode.com/gh_mirrors/st/SteamShutdown 你是否曾经在深夜设置好Steam游戏下载后安…...

别再死记硬背了!用银行1104报表和反洗钱报送,手把手教你搞懂数仓分层与ETL实战

金融数据仓库实战:从监管报表到反洗钱系统的ETL架构设计 银行数据工程师每天面对的核心挑战之一,是如何将海量、杂乱的业务数据转化为符合监管要求的标准化报表。当我第一次接手1104报表项目时,面对数十个数据源和上百个校验规则,…...

UVM仿真总在奇怪的地方卡住?手把手教你用Objection机制精准控制Phase结束

UVM仿真卡死?Objection机制深度解析与实战避坑指南 刚搭建完UVM环境的新手验证工程师们,是否经常遇到仿真莫名其妙挂起或提前结束的情况?当你盯着屏幕等待仿真结果,却发现进度条卡在某个phase一动不动,或者关键测试用…...

如何高效获取百度文库文档:专业自动化工具完整指南

如何高效获取百度文库文档:专业自动化工具完整指南 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 在学术研究、工作汇报和资料收集过程中,百度文库作为中文文档资源平台&a…...