C++详细分析讲解引用的概念与使用
1.引用的概念引用不是新定义一个变量而是给已存在变量取了一个别名编译器不会为引用变量开辟内存空间它和它引用的变量共用同一块内存空间。2.引用的格式类型 引用变量名 ( 对象名 ) 引用实体举例如下注意引用类型必须和引用实体是同种类型的3.引用的特性(1). 引用在 定义时必须初始化例如int d; 这样就是没有初始化是错的(2). 一个变量可以有多个引用int a 10;int b a;int c b;int* p b; //p是指针(3). 引用一旦引用一个实体再不能引用其他实体4.取别名原则对原引用变量权限只能缩小即 可读可写(普通类型) 可以改成 只读(const)不能放大:即 只读 不能改成 可读可写的例子1权限的放大不能把const给非const例子2权限的缩小 非const 既可以给非const也可以给const例子3权限缩小和放大规则:适用于引用和指针间例子4 权限不适用于普通赋值:难点隐式类型转换的引用整形e能否做双精度浮点型d的别名呢直接赋值是不行的需要加上const才正确。即const int e d;正确解释隐式类型转换的普通赋值的情况上面的例子int fd从语法上看把8字节的d不能直接给4字节的f因为浮点数和整形的存储形式就不一样没办法直接截取所以d需要先把整数部分给一个4字节的临时变量再把临时变量给f再看引用int ed;临时变量具有常性所以这里把临时变量给引用e的时候相当于是把自带const的临时变量赋值给非const的e把只读的给可读可写的是放大了权限所以错误必须改成const int ed;才正确5.引用的使用场景做参数(1)传参:实参给形参传值和传地址都需要传一份值/地址的拷贝引用传参可以减少拷贝提高效率1234567891011121314151617181920voidSwap(int x,int y){inttmp x;x y;y tmp;}voidSwap(double x,double y){doubletmp x;x y;y tmp;}intmain(){inta 0, b 1;swap(a, b);doublec 1.1, d 2.2;swap(c, d);return0;}(2)作输出型参数leetcode上的题往往有输出型参数在c中就可以用引用代替更加方便做返回值intCount()的讲解传值返回:会有一个拷贝传引用返回:没有这个拷贝了函数返回的直接就是返回变量的别名1234567891011int Count(){intn 0;n;returnn;}intmain(){intret Count();return0;}首先我们来看普通的传值返回普通的传值返回需要把返回值n给一个函数类型int的临时变量(函数类型就是返回值类型)再把临时变量给ret。为什么设计一个临时变量直接把n给ret不行吗答不行因为当函数Count里执行完各种代码后返回n等出了Count函数的作用域后n就会销毁所以不能直接把n给ret需要一个临时变量。如何证明返回时存在临时变量呢如果你用int ret 接收写成int ret Count();发现无法运行因为临时变量有常性所以需要写成const int ret Count();才能通过。此时再看传引用返回当用引用接收引用返回时这里ret和n的地址一样也就意味着ret其实就是n的别名。但是因为n出作用域不会立即被覆盖所以第一次通过ret可以打印是1当打印第二次时因为前面已经调用过一次打印函数已 销毁 的Count函数栈帧在此时被打印函数覆盖再打印ret就会是随机数了即如果函数返回时出了函数作用域如果返回对象还未还给系统则可以使用引用返回如果已 经还给系统了则必须使用传值返回。用static修饰n后用static静态变量使n只初始化一次且改变其生命周期把n放进了静态区这样n就一直存在就可以通过ret找到n了再怎么打印ret都是1.传值传引用效率比较以值作为参数或者返回值类型在传参和返回期间函数不会直接传递实参或者将变量本身直接返回而是传递实参或者返回变量的一份临时的拷贝因此用值作为参数或者返回值类型效率是非常低下的尤其是 当参数或者返回值类型非常大时效率就更低。 总结传值和指针在作为传参以及返回值类型上效率相差很大 。

相关新闻

GPT-4 API 成本优化实战:3种调用策略对比,Token消耗降低40%

GPT-4 API 成本优化实战:3种调用策略对比,Token消耗降低40%

GPT-4 API成本优化实战:3种高效调用策略深度解析 当企业级应用开始规模化接入GPT-4 API时,开发者们往往会面临一个现实挑战——随着业务量增长,API调用成本呈现指数级上升。某电商平台在接入GPT-4生成商品描述后,仅一个月就产生了…

2026/7/9 5:50:07阅读更多 →
S7-200 SMART 存储卡应用:3分钟完成程序复制与密码清除操作

S7-200 SMART 存储卡应用:3分钟完成程序复制与密码清除操作

S7-200 SMART存储卡高效应用:程序批量部署与安全维护实战指南在工业自动化项目中,时间就是生产力。当面对数十台相同配置的PLC设备时,传统的一对一编程下载方式会消耗工程师大量时间。西门子S7-200 SMART系列PLC的MicroSD存储卡功能&#xff…

2026/7/9 5:50:07阅读更多 →
2026年,这家切削液净化专家如何让工厂废液变“黄金”?

2026年,这家切削液净化专家如何让工厂废液变“黄金”?

走进任何一家现代化的机加工车间,你都能听到机床运转的轰鸣声,看到冷却液(切削液)在设备与工件间奔流不息。这看似平常的工业血液,却隐藏着巨大的成本黑洞与环保风险:过滤不净导致工件报废、浮油滋生细菌引…

2026/7/9 5:45:07阅读更多 →
Linux环境变量与数组变量学习小结

Linux环境变量与数组变量学习小结

环境变量是Linux系统中存储系统环境信息的重要机制,它们分为全局环境变量和局部环境变量两种类型。全局环境变量(也称为系统环境变量)对当前Shell及其所有子Shell可见,通常在系统启动时加载,而局部环境变量仅在定义它们…

2026/7/9 6:55:10阅读更多 →
突发!阿里全面禁用Claude Code!2026AI圈重磅变局,背后攻防远比你想象的更残酷

突发!阿里全面禁用Claude Code!2026AI圈重磅变局,背后攻防远比你想象的更残酷

2026年AI圈最大变局,正式落地!近日,阿里内部正式官宣:全面禁用Claude Code全系产品,将其列入高风险软件黑名单,全员禁止在办公环境、开发设备、内网工程中使用,7月10日起全集团强制执行。消息一…

2026/7/9 6:55:10阅读更多 →
龙虾3.13部署避坑指南:环境、配置与命令失效的深层根因

龙虾3.13部署避坑指南:环境、配置与命令失效的深层根因

1. “一键部署”背后的三重幻觉:为什么龙虾3.13的安装脚本从不告诉你真实成本“OpenClaw 龙虾 3.13 一键部署成功!”——这句话在技术社区里出现频率极高,截图里终端窗口绿字滚动、服务端口亮起、Web界面弹出,看起来毫无破绽。我去…

2026/7/9 6:55:10阅读更多 →
百考通,任务书一键生成,让学术研究起步即规范

百考通,任务书一键生成,让学术研究起步即规范

任务书是学术研究的“第一份契约”,它不仅要明确研究内容、技术目标,还要符合学校的规范格式,往往成为很多同学学术之路的第一个难题。百考通AI(https://www.baikaotongai.com)的任务书生成功能,让你告别无…

2026/7/9 6:55:10阅读更多 →
高斯过程回归 3 大核心挑战:计算复杂度 O(n³)、核函数选择、超参数优化

高斯过程回归 3 大核心挑战:计算复杂度 O(n³)、核函数选择、超参数优化

高斯过程回归实战:破解计算复杂度、核函数选择与超参数优化三大难题当数据科学家面对小样本、非线性回归问题时,高斯过程回归(GPR)往往成为首选工具。然而在实际工程落地中,我们常被三大挑战困扰:O(n)的计算…

2026/7/9 6:55:10阅读更多 →
Gemini×Calendar无缝协同:2024最新API集成实战,3步实现AI日程自动优化

Gemini×Calendar无缝协同:2024最新API集成实战,3步实现AI日程自动优化

更多请点击: https://codechina.net 第一章:GeminiCalendar无缝协同:2024最新API集成实战,3步实现AI日程自动优化 Google Gemini 与 Google Calendar 的深度集成在2024年迎来关键升级——全新支持 OAuth 2.0 scopes 细粒度授权、…

2026/7/9 6:50:10阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/9 5:56:19阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/8 7:00:12阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/9 2:47:07阅读更多 →
Three.js 着色器光效教程

Three.js 着色器光效教程

着色器光效 Shader Light ▶ 在线运行案例 案例合集: 三维可视化功能案例(threehub.cn)开源仓库github地址: https://github.com/z2586300277/three-cesium-examples400个案例代码: 网盘链接 你将学到什么 ShaderMaterial 自…

2026/7/9 0:04:37阅读更多 →
如何5分钟掌握CS2智能库存管理:开源工具CASEMOVE终极指南

如何5分钟掌握CS2智能库存管理:开源工具CASEMOVE终极指南

如何5分钟掌握CS2智能库存管理:开源工具CASEMOVE终极指南 【免费下载链接】casemove A dedicated desktop app that enables you to move items in and out of storage units in CS2. 项目地址: https://gitcode.com/gh_mirrors/ca/casemove 还在为CS2存储单…

2026/7/9 0:04:37阅读更多 →
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比

GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比

GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M…

2026/7/9 0:04:37阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/8 6:59:54阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/8 13:42:39阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/8 13:42:39阅读更多 →