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

新手避坑指南:C++ 引用、内联函数与 nullptr 全解析

一、 引用1. 引用基础概念给已有的变量“新名字”别名使用类型引⽤别名引⽤对象;案例在需要传指针的地方可以用引用代替不需要调用该指针让形参就叫别名改变形参就是改变实参特性引用在定义的时候必须初始化一个变量可以有多个引用引用一旦引用一个实体再不能引用其他实体代码语言javascriptAI代码解释int a 10; int ra; // 编译报错“ra”: 必须初始化引⽤ int b a; int c 20; // 这⾥并⾮让b引⽤c因为C引⽤不能改变指向 // 这⾥是⼀个赋值主要应用函数参数传递函数返回值引用返回值能不能随便用2. 引用返回注意事项代码语言javascriptAI代码解释int func() { int a 0; return a;//错的:a是局部的返回时候已经销毁类似野指针 } int func1(int ra) { ra 3 return ra;//对的:ra是外部传入的引用出函数依旧存在 }3.const引用规则权限可缩小不可放大仅限制引用本身的访问权限代码语言javascriptAI代码解释int main() { const int a 0; int ra a;//错的 const int ra a;//对的 //权限放大 //注意分辨 const int a 0; int ra a;//这是可以的不是权限放大 int b 0; const int rb b;//对的 //权限缩小 //这个地方没有缩小b的权限b依旧能该改变 b;//对 rb;//错 //类比公共场合添加一个身份做不了一些事情权限缩小 int rc 30;//错 const int rc 30;//对 //const引用可以给常量取别名单纯的引用不可以 //这是因为const修饰的变量具有常性所以不可更改这也就是const修饰能够对常量取别名的原因 //编译器需要⼀个空间暂存表达式的求值结果中间值时临时创建的⼀个未命名的对象 int rd (ab);//可以对临时对象赋值 int rd (ab);//不可以对临时对象单纯引用没法修改 const int rd (ab);//可以用const引用不修改 //这也是因为临时对象具有常性 double d 12.34; int i d;//是隐式类型转换这个过程有临时对象 int i d;//不可以 const int i d;//可以 //下面介绍一个很好用的东西 //函数模板T可以是任意类型 template class T void func(T val) { //注意看这里传入的T是任意类型 //所以程序员对它进行一个引用T val防止传入的值太大拷贝成本高 //这里传常量/临时对象/带有类型转换可以吗不行 //最终const T val,这样子就什么都能传 // 使用const引用可接收 // 1. 普通变量 // 2. 常量 // 3. 临时对象 // 4. 类型转换结果 // 类似void*的通用性 } return 0; }4. 指针和引用的关系与区别引用不额外开空间指针是开一个空间来存储地址引用使用必须初始化指针不是必须要求的引用只能初始化一次不能更改指针可以更改指向对象引用可以直接访问对象别名指针需要解引用。sizeof引用返回的是引用类型的大小而指针则根据操作系统不一样大小不一样指针有野指针和空指针的问题引用很少有代码语言javascriptAI代码解释int* ptr nullptr; int rptr *ptr; rptr;在这里插入图片描述二、inline 和 宏函数1. 宏函数在C语言里有通过#define定义的宏函数为了防止宏函数的使用往往小心翼翼要加很多层括号本质预编译阶段的文本替换不是真正的函数调用。目的在避免函数调用栈帧开销的同时实现代码复用比普通函数更轻量比内联函数更「强制」替换。展示:代码语言javascriptAI代码解释//正确 #define ADD(a,b) ((a)(b)) int main() { int add ADD(3,2); return 0; } //错误加分号 #define ADD(a,b) ((a)(b)); int main() { if (ADD(3, 2) 0) { //执行某操作 } return 0; } #define ADD(a,b) (ab) //错误不加内层括号 int main() { int add ADD(1 ^ 1, 2 ^ 2); //替换以后 》1^(12)^2 return; } #define ADD(a,b) (a)(b); //错误外层无括号 int main() { int add ADD(3,2) * ADD(3,2); //替换以后 》3(2*3)2 return 0; }以上是宏函数的使用2. inline内联函数上面宏函数的二条提到了内联函数inline是一个关键字他所修饰的函数称之为内联函数上文提到宏函数是为减少函数栈帧的开销inline也有这个作用内联函数有什么用 内联函数是一个类似”宏函数“的函数不同于宏函数内联函数是在函数内部计算以后返回值有的朋友要说函数不都这样吗其实不然内联函数的本质是把函数的独立栈帧省略掉直接使用调用者的栈帧。 这里插入栈帧的概念栈帧也叫「活动记录」是程序运行时栈内存中为单个函数调用分配的一块独立内存区域用于存储该函数的局部变量函数参数返回地址函数执行完后要回到调用者的哪一行代码栈基址EBP/RBP 寄存器用于定位栈帧内的变量临时数据比如表达式计算的中间结果程序的调用栈Call Stack就是由多个嵌套的栈帧组成的比如main() 调用funcA()funcA() 又调用funcB()栈中会依次压入main栈帧 →funcA栈帧 →funcB栈帧栈顶。比如说在main函数中调用一个inline int add的函数如果去掉inline他会创建栈帧而加上inline变为内联函数以后就在main函数的栈帧上创建自己的栈帧省去了跳转等操作简单了许多当函数 A 调用函数 B 时函数 A 是「调用者Caller」它的栈帧就是「调用者的栈帧」函数 B 是「被调用者Callee」它的栈帧就是「被调用者的栈帧」。 「调用者的栈帧」就是发起调用的那个函数在栈上的内存区域在函数调用过程中它会暂时被「被调用者的栈帧」覆盖栈顶偏移但调用结束后CPU 会回到调用者的栈帧继续执行。

相关文章:

新手避坑指南:C++ 引用、内联函数与 nullptr 全解析

一、 引用1. 引用基础概念:给已有的变量“新名字”(别名)使用:类型&引⽤别名引⽤对象;案例:在需要传指针的地方,可以用引用代替,不需要调用该指针,让形参就叫别名,改…...

MobaXterm连CentOS7踩坑记:‘Server refused to start a shell/command‘ 报错排查与预防全攻略

MobaXterm连接CentOS7实战:Server refused to start a shell/command 深度解决方案 当你用MobaXterm连接CentOS7服务器时,突然遇到"Server refused to start a shell/command"这个错误,确实会让人措手不及。这种情况在资源紧张的服…...

如何在3分钟内掌握Iwara视频批量下载的完整教程

如何在3分钟内掌握Iwara视频批量下载的完整教程 【免费下载链接】IwaraDownloadTool Iwara 下载工具 | Iwara Downloader 项目地址: https://gitcode.com/gh_mirrors/iw/IwaraDownloadTool Iwara视频下载工具是一款专为Iwara平台用户设计的强大浏览器脚本,让…...

【Linux 网络】理解并应用应用层协议

HTTP的请求与响应格式 请求格式 请求行:请求方法(GET) 空格 URI(资源地址) 空格 HTTP版本(HTTP/1.1) 换行符(\r\n) 请求报头:表示请求的属性。冒号分割的键值对;每组属性之间使用 \r\n 分隔,遇到空行表示Header部分结束。 请求…...

在Ubuntu 22.04上搞定IDA Pro 7.7:解决libSM.so.6等32位库依赖的保姆级教程

在Ubuntu 22.04上解决IDA Pro 7.7的32位库依赖问题 逆向工程的世界里,IDA Pro无疑是那把瑞士军刀。但当你兴冲冲地在Ubuntu 22.04上双击idaq64时,终端却抛出一堆"cannot open shared object file"的错误——这种挫败感我太熟悉了。去年接手一个…...

AMD Ryzen处理器底层调试工具SMUDebugTool深度解析与实战指南

AMD Ryzen处理器底层调试工具SMUDebugTool深度解析与实战指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcod…...

AI人工智能——解读智能算力服务质量模型

本文介绍了智能算力服务质量模型ICPS-QM的核心内容。随着大模型参数量呈指数性增长和智能算力服务需求的激增,国家高度重视算力网络一体化,并发布了相关实施意见。然而,算力网络存在云和网相对独立、跨云一体化资源调度困难等问题,智算服务也面临算力不足、能耗高、服务安全…...

终极解决方案:3秒将网页LaTeX公式完美粘贴到Word文档

终极解决方案:3秒将网页LaTeX公式完美粘贴到Word文档 【免费下载链接】LaTeX2Word-Equation Copy LaTeX Equations as Word Equations, a Chrome Extension 项目地址: https://gitcode.com/gh_mirrors/la/LaTeX2Word-Equation 还在为学术写作中公式复制而烦恼…...

微信小程序的购物商城商品订货订单系统

目录同行可拿货,招校园代理 ,本人源头供货商微信小程序购物商城订单系统功能分析项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 微信小程序购物商城订单系统功能分析 用户端功能模块 …...

PlantUML在线编辑器:从代码到图形的可视化创作平台

PlantUML在线编辑器:从代码到图形的可视化创作平台 【免费下载链接】plantuml-editor PlantUML online demo client 项目地址: https://gitcode.com/gh_mirrors/pl/plantuml-editor 还在为绘制专业的技术图表而烦恼复杂的拖拽操作吗?PlantUML在线…...

032、Agent的决策优化:集成强化学习基础

032、Agent的决策优化:集成强化学习基础 当你的Agent在复杂环境中反复“撞墙”时,是时候给它一个“试错学习”的大脑了。 前言 在之前的Agent开发中,我们主要依赖预定义的规则、工具调用和LLM的推理能力来驱动决策。无论是使用LangChain构建的问答Agent,还是通过CrewAI组建…...

基于IPQ5018平台的高性能无缝漫游(Roaming)解决方案

基于IPQ5018平台的高性能无缝漫游(Roaming)解决方案在企业网络、工业场景及大规模无线覆盖中,稳定的连接体验比单纯的速率更重要。尤其是在移动终端频繁切换接入点(AP)的环境中,无缝漫游(Seamle…...

AntiMicroX:游戏手柄映射解决方案的技术实现与配置策略

AntiMicroX:游戏手柄映射解决方案的技术实现与配置策略 【免费下载链接】antimicrox Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. 项目地址: https://gitcode.com/GitH…...

QQ音乐加密格式算法深度解析与逆向工程实现

QQ音乐加密格式算法深度解析与逆向工程实现 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 在数字音乐版权保护的背景下…...

RLHF-V:如何验证与改进大模型对齐中的奖励模型?

1. 项目概述:从“对齐”到“对齐对齐者”如果你在AI领域,特别是大语言模型(LLM)的微调与对齐方向上有所涉猎,那么“RLHF”这个词对你来说一定不陌生。RLHF,即基于人类反馈的强化学习,是让ChatGP…...

Claude Code与Browserbase协同:技能、安装、使用及故障排除全揭秘

Browserbase技能 这是一组可让Claude Code通过浏览器自动化和官方的bb CLI与Browserbase协同工作的技能。此插件包含以下技能(详情见 skills/ 目录): browser:通过CLI命令实现网页浏览器交互自动化,支持具备反机器人隐…...

如何设计企业级 AI 全生命周期管理平台?

在 AI 应用持续深化的今天,越来越多的企业遇到了新挑战:数据管理混乱、模型部署困难、算力资源浪费、安全合规缺失等,亟需一套系统化的解决方案,构建一个统一的“AI 全生命周期管理平台”应运而生。 这样的平台长什么样&#xff1…...

惊人!Postgres 扩展性超预期,单服务器每秒可处理 43000 个工作流

DBOS 相关信息 5 月 7 日 DBOS 用户组提到,每秒能实现 40,000 个工作流。DBOS 有多种产品,包括开源持久执行库 DBOS Transact、代理和工作流的控制平面 DBOS Conductor 等,还有相关资源和文档。 产品 DBOS Transact:开源持久执行库…...

AgentWeb

添加依赖 implementation io.github.justson:agentweb-core:v5.1.1-androidx implementation io.github.justson:agentweb-filechooser:v5.1.1-androidx // (可选) implementation com.github.Justson:Downloader:v5.0.4-androidx // (可选) implementation com.github.lzyzs…...

KLayout版图设计工具:从零开始掌握开源芯片设计的5个关键步骤

KLayout版图设计工具:从零开始掌握开源芯片设计的5个关键步骤 【免费下载链接】klayout KLayout Main Sources 项目地址: https://gitcode.com/gh_mirrors/kl/klayout KLayout是一款功能强大的开源版图设计工具,专为集成电路设计和电子设计自动化…...

搞懂5G QoS配置:QCI/5QI、ARP、GBR/MBR参数到底怎么设?一个实战案例说清楚

5G QoS实战指南:从参数解析到企业物联网配置案例 在5G网络部署中,服务质量(QoS)配置直接决定了关键业务的传输质量。不同于4G时代相对简单的带宽分配,5G QoS需要针对不同业务类型(如增强移动宽带eMBB、超可靠低时延通信uRLLC、海量…...

中文作文智能体实战项目:基于大语言模型的Web端写作助手设计与实现

目录1. 项目背景与目标2. 系统架构与技术选型2.1 整体架构2.2 关键技术点3. 核心功能详解3.1 文体与字数选择3.2 会话管理3.3 写作指导侧边栏4. 使用流程与界面说明4.1 快速开始步骤4.2 界面区域划分5. 关键代码解析5.1 流式生成核心函数5.2 提示词工程6. 数据持久化与安全6.1 …...

R 4.5模型边缘化落地全链路,从caret/xgboost/lme4到TFLite/Roofline建模→设备端AOT编译

更多请点击: https://intelliparadigm.com 第一章:R 4.5边缘智能部署的范式演进与技术定位 R 4.5标志着统计计算环境向轻量化、实时化与分布式协同的重大跃迁。它不再仅服务于传统桌面分析场景,而是深度嵌入边缘设备(如工业网关、…...

**软件的本质是服务于持续演进的业务需求与用户期望,而非一次性静态交付品

改正性维护:针对已发现的错误(Bug)进行修复,占维护工作约20%;适应性维护:使软件适应外部环境变化(如新OS、新硬件、法规更新等),占比约25%;完善性维护&#x…...

从单机到集群:我是如何用三台旧笔记本搭建Hadoop 3.1.4学习环境的

从单机到集群:我是如何用三台旧笔记本搭建Hadoop 3.1.4学习环境的 去年整理书房时,翻出三台闲置多年的旧笔记本——2015款的ThinkPad X250、2017年的MacBook Air和一台不知名的华硕本。这些"老伙计"虽然跑不动最新游戏,但配置都还完…...

从Arduino到STM32:用AS5600磁编码器做个角度传感器,附完整代码与精度对比

从Arduino到STM32:AS5600磁编码器实战指南与精度优化 磁编码器在现代运动控制系统中扮演着关键角色,而AS5600作为一款高性价比的解决方案,正受到越来越多创客和工程师的青睐。本文将带您跨越Arduino快速原型开发与STM32工业级应用之间的鸿沟&…...

行为克隆与动作量化:机器人控制的核心挑战与实践

1. 行为克隆与动作量化的核心挑战在机器人控制和自动驾驶领域,我们经常面临一个关键问题:如何让机器像人类专家一样执行复杂任务?行为克隆(Behavior Cloning)提供了一种直观的解决方案——通过观察专家的示范动作来学习…...

告别死记硬背:用Python脚本模拟ECU,5分钟搞懂UDS服务原语和PDU

告别死记硬背:用Python脚本模拟ECU,5分钟搞懂UDS服务原语和PDU 在汽车电子开发领域,诊断协议的理解往往是工程师进阶路上的绊脚石。传统学习方式需要死记硬背各种服务ID、原语流程和PDU结构,既枯燥又低效。今天我们将打破这种困境…...

蜂群智能体系统可靠性的关键是什么

核心观点提要 2026年4月最后一周至5月初,多智能体系统领域出现了三条此前从未交汇的线索的共振:评估基础设施的结构性崩塌、安全攻击从理论走向实战化、以及协议标准化竞争进入大国博弈阶段。Springer发表的Agentic AI评估综述给出了一个令人不安的数字…...

SOCD Cleaner终极指南:4种模式彻底解决键盘输入冲突,提升游戏操作精度

SOCD Cleaner终极指南:4种模式彻底解决键盘输入冲突,提升游戏操作精度 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 你是否在玩格斗游戏时因为同时按下W和S键导致角色卡顿?…...