函数重载和引用【C++】
文章目录
- 函数重载
- 什么是函数重载?
- 函数重载的作用
- 使用函数重载的注意点
- 为什么C++可以函数重载,C语言不行?
- 引用
- 什么是引用?
- 引用的语法
- 引用的特点
- 引用的使用场景
- 引用的底层实现
- 传参时传引用和传值的效率
- 引用和指针的区别
函数重载
什么是函数重载?
函数重载:
重载函数是函数的一种特殊情况。
为方便使用,C++允许在同一作用域中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指1.参数的个数 2.类型 3.顺序)必须至少有一个不同
根据这些同名函数的参数表的不同,达成传入参数类型不同,调用的函数不同的效果
函数重载的作用
让功能类似的函数可以用同一名字,不用费心思去取差别不大的名字
例

如果不用函数重载,就要给Swap,取Swap1,Swap2等名字容易混淆
使用函数重载的注意点
-
函数重载与函数的返回值
无关 -
同名且参数表不同【参数表不同即参数类型不同或参数个数不同或参数顺序不同(满足三个条件中的一个就行)】的函数就可以构成重载
参数类型不同:

参数个数不同:

参数顺序不同:

-
只有
同一作用域中的同名且参数表不同函数才构成重载
即不同命名空间/类中的同名函数不可能构成重载 -
重载函数也
可以参数缺省
例

这个时候就要注意:不要因为少传参数而导致调用的重载函数不明确
例

为什么C++可以函数重载,C语言不行?
这就又涉及到编译链接了,因为C++是在C语言的基础上出现的,而且C++是兼容C语言的【即C语言的语法在C++编译器中也能使用】所以C++的编译链接过程和C语言很像
(不了解编译和链接的可以看我这篇文章:c语言编译和链接)
为什么C++可以函数重载,C语言不行?这一问题主要是在编译链接时的编译和汇编时的符号汇总和形成符号表【符号表:可以简单的将其视为 词法分析时拆分出来的所有特殊符号+该特殊符号对应的地址共同制作出的一份方便链接的表】的时候
C语言编译链接时函数名进入符号表时表中对应的特殊字符就是它的函数名【不做任何修饰】
而C++的函数进入符号表时表中对应的特殊字符是编译器根据该函数的参数表和编译器自己的修饰规则【每个编译器的修饰规则不同】对该函数名进行修饰之后的特殊符号,而不是单纯的函数名
上面的差异就在编译链接的链接部分起了不同的作用
因为链接是根据符号表中的特殊符号的名字找它的地址,并以此看它有没有定义
而C语言如果函数名同名了,那进入符号表的都是它的函数名根本区分不开,就算两个函数都有定义有地址,链接时编译器根本不知道找那个。
但C++不同它进入符号的是编译器根据该函数的参数表和编译器自己的修饰规则修饰之后的符号,如果它的参数不同修饰后的符号就不同,链接时编译器“一眼“就看出不同了
引用
什么是引用?
引用是给已存在变量取一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。
即使用一个变量的引用就是使用该变量,修改它的引用也是修改变量自己
例

引用的语法
源变量的类型+&+别名=源变量名
例

引用的特点
-
引用
必须初始化 -
一个变量可以有多个引用
例

-
引用一旦引用一个实体后就
不能去引用其他实体了
例
如果直接=,就是赋值


引用的使用场景
引用可以做参数,可以达到类似指针的效果
例

这样设计Swap的参数的话,形参a,b就是实参a,c的引用,那么该a,b就是改a,c,改形参就是改实参
引用的底层实现
引用的底层【汇编层次】实现其实是和指针一样的
都是开出一个指针大小的空间将引用(指向)的变量的地址放进去
但是使用上却不同,为什么呢?
其实是编译器进行了隐式的包装,我们使用引用时使用到的就是那一层包装
所以一般认为:
引用语法上是不开空间的,引用和它引用的源变量共用一个空间
指针语法上是开空间的,将指向的对象的地址存入开出的空间
传参时传引用和传值的效率
传引用效率更高,因为引用底层实现是和指针一样的,开空间存地址
所以传参时,如果形参是引用,那么实参传递的其实是实参的地址
引用和指针的区别
-
引用概念上定义一个变量的别名,指针存储一个变量地址。
-
引用在定义时必须初始化,指针没有要求
-
引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体
-
有多级指针,但是没有多级引用
-
没有NULL引用,但有NULL指针
-
引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
-
访问实体方式不同,指针需要显式解引用,引用编译器自己处理
相关文章:
函数重载和引用【C++】
文章目录 函数重载什么是函数重载?函数重载的作用使用函数重载的注意点为什么C可以函数重载,C语言不行? 引用什么是引用?引用的语法引用的特点引用的使用场景引用的底层实现传参时传引用和传值的效率引用和指针的区别 函数重载 什…...
rust-tokio发布考古
源头: Carl Lerche Aug 4, 2016 I’m very excited to announce a project that has been a long time in the making. 我很兴奋地宣布一个酝酿已久的项目。 Tokio is a network application framework for rapid development and highly scalable deployments…...
3D医疗图像配准 | 基于Vision-Transformer+Pytorch实现的3D医疗图像配准算法
项目应用场景 面向医疗图像配准场景,项目采用 Pytorch ViT 来实现,形态为 3D 医疗图像的配准。 项目效果 项目细节 > 具体参见项目 README.md (1) 模型架构 (2) Vision Transformer 架构 (3) 量化结果分析 项目获取 https://download.csdn.net/down…...
设计模式(18):状态模式
核心 用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题 结构 环境类(Context): 环境类中维护一个State对象,它定义了当前的状态,并委托当前状态处理一些请求; 抽象状态类(State): 用于封装对象的一个特定状态所对应的行为&a…...
如果用大模型考公,kimi、通义千问谁能考高分?
都说大模型要超越人类了,今天就试试让kimi和通义千问做公务员考试题目,谁能考高分? 测评结果再次让人震惊! 问题提干:大小两种规格的盒装鸡蛋,大盒装23个,小盒装16个,采购员小王买了…...
如何在Java中创建对象输入流
在Java中创建对象输入流(ObjectInputStream)通常涉及以下步骤: 获取源输入流:首先,你需要有一个源输入流,它可能来自文件、网络连接或其他任何可以提供字节序列的源。 包装源输入流:接着&#…...
Vue 打包或运行时报错Error: error:0308010C
问题描述: 报错:Error: error:0308010C 报错原因: 主要是因为 nodeJs V17 版本发布了 OpenSSL3.0 对算法和秘钥大小增加了更为严格的限制,nodeJs v17 之前版本没影响,但 V17 和之后版本会出现这个错误…...
222222222222222222222222
欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…...
微信小程序 电影院售票选座票务系统5w7l6
uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。 框架支持:springboot/Ssm/thinkphp/django/flask/express均支持 前端开发:vue.js 可选语言:pythonjavanode.jsphp均支持 运行软件…...
C#:用定时器监控定时器,实现中止定时器正在执行的任务,并重启
Windows服务中使用的比较多的是定时器,但这种定时任务有个比较大的毛病:有时会莫名其妙地停止执行(长时间执行不完,假死),必须得手工重启Windows服务才能恢复正常。这个就太麻烦了。 有没有办法来实现定时…...
计算机组成原理 — CPU 的结构和功能
CPU 的结构和功能 CPU 的结构和功能CPU 概述控制器概述CPU 框架图CPU 寄存器控制单元 CU 指令周期概述指令周期的数据流 指令流水概述指令流水的原理影响流水线性能的因素流水线的性能流水线的多发技术流水线结构 中断系统概述中断请求标记和中断判优逻辑中断请求标记 INTR中断…...
npm包安装与管理:深入解析命令行工具的全方位操作指南,涵盖脚本执行与包发布流程
npm,全称为Node Package Manager,是专为JavaScript生态系统设计的软件包管理系统,尤其与Node.js平台紧密关联。作为Node.js的默认包管理工具,npm为开发者提供了便捷的方式来安装、共享、分发和管理代码模块。 npm作为JavaScript世…...
序列化结构(protobuf)实现一个TCP服务器(C++)
Protocol Buffers(protobuf)是一种由Google开发的用于序列化结构化数据的方法,通常用于在不同应用程序之间进行数据交换或存储数据。它是一种语言无关、平台无关、可扩展的机制,可以用于各种编程语言和环境中。 1、首先建立proto文…...
Python中的list()和map() 用法
list() 在Python中,list() 是一个内置函数,用于创建列表(list)对象。它有几个不同的用途,但最常见的是将一个可迭代对象(如元组、字符串、集合或其他列表)转换为一个新的列表。 以下是一些使用…...
公网环境下如何端口映射?
公网端口映射是一种网络技术,它允许将本地网络中的设备暴露在公共互联网上,以便能够从任何地方访问这些设备。通过公网端口映射,用户可以通过互联网直接访问和控制局域网中的设备,而无需在本地网络中进行复杂的配置。 公网端口映射…...
7-36 输入年份和月份
输入一个年份和月份,输出这个月的天数。 输入格式: 输入年份year和月份month,年份和月份中间用一个空格隔开。 输出格式: 输入year年的month月对应的天数。 输入样例: 2000 2输出样例: 29输入样例: 1900 2输出样例: 28输入样例: 1900 6输出样例…...
Linux C++ 023-类模板
Linux C 023-类模板 本节关键字:Linux、C、类模板 相关库函数:getCapacity、getSize 类模板语法 类模板的作用:建立一个通用的类,类中的成员 数据类型可以不具体制定, 用一个虚拟的类型代表语法: templa…...
Android图形显示架构概览
图形显示系统作为Android系统核心的子系统,掌握它对于理解Android系统很有帮助,下面从整体上简单介绍图形显示系统的架构,如下图所示。 这个框架只包含了用户空间的图形组件,不涉及底层的显示驱动。框架主要包括以下4个图形组件。…...
算法学习17:背包问题(动态规划)
算法学习17:背包问题(动态规划) 文章目录 算法学习17:背包问题(动态规划)前言一、01背包问题:1.朴素版:(二维)2.优化版:(一维…...
axios-mock-adapter使用
文章目录 1. 安装 axios-mock-adapter2. 引入所需的库3. 创建一个模拟适配器实例4. 定义模拟响应5. 在你的代码中使用 axios6. 在测试或开发完成后清理模拟 axios-mock-adapter 是一个用于模拟 axios HTTP 请求的库。它允许你在测试或开发过程中,为 axios 实例提供…...
长期使用Taotoken Token Plan套餐的成本控制体会
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用Taotoken Token Plan套餐的成本控制体会 1. 从按需计费到套餐订阅的转变 在开始使用Taotoken平台时,我和团队…...
【DeepSeek本地部署终极指南】:20年AI架构师亲授,从零到生产级部署的7大避坑步骤
更多请点击: https://codechina.net 第一章:DeepSeek本地部署完整指南 DeepSeek系列大模型(如DeepSeek-V2、DeepSeek-Coder)已开源权重,支持在消费级GPU或本地服务器上高效部署。本指南聚焦零基础用户,提供…...
Linux 安全 - 从SUID到Capabilities:细粒度权限控制的演进与实践
1. 从SUID到Capabilities:权限控制的进化史 记得我第一次接触Linux权限管理时,被那个神秘的SUID位搞得晕头转向。当时为了给团队搭建一个共享日志分析工具,需要让普通用户能够读取/var/log下的敏感日志文件。老同事建议我"给那个脚本加个…...
基于LangChain构建AI智能体:从核心架构到生产部署实战
1. 项目概述与核心价值最近在GitHub上看到一个名为“GenAI_Agents”的项目,作者是NirDiamant。这个项目名本身就很有意思,它直指当前AI领域最火热、也最具想象力的方向之一:智能体(Agents)。简单来说,这个项…...
移动篇:WMS里的“乾坤大挪移”——移库、补货、冻结全解析
WMS里的“乾坤大挪移”——移库、补货、冻结全解析 摘要:货物入库后,不是“一放了之”。库位要优化、库存要周转、临期品要管理……这就涉及WMS中的“库存移动”操作。移库、补货、冻结分别解决什么问题?什么场景下会用到?本文带你…...
【玩转Jetson TX2 NX】(四)M.2 SSD系统迁移实战:从克隆到无缝启动
1. 为什么需要将系统迁移到M.2 SSD? Jetson TX2 NX作为一款嵌入式AI计算设备,默认搭载的eMMC存储空间往往捉襟见肘。我在实际项目中发现,16GB的eMMC在安装完JetPack系统后,剩余空间连一个中等规模的深度学习模型都放不下。更不用…...
Kimsuky 组织基于 PebbleDash 与 AppleSeed 的攻击战术演进与技术分析
摘要 Kimsuky(亦称 APT43、Ruby Sleet 等)是活跃逾十年的朝鲜语系高级持续性威胁(APT)组织,长期针对韩国及全球多国政府、国防、医疗等关键领域实施定向攻击。本文基于卡巴斯基 GReAT 团队 2026 年 5 月公开的最新攻击…...
Claude Code Ultraplan 远程多代理规划全解析:AI Agent、CCR远程容器、异步规划、状态机、计划传送与企业级自动化治理
一、先说结论:Ultraplan 到底解决了什么痛点?Ultraplan 可以理解为一种“远程规划模式”:用户在本地终端发起一个复杂任务,系统把规划阶段卸载到远程 CCR 容器中执行。本地终端不再被长时间占住,远程端可以使用更强模型…...
零基础实战:在AutoDL云端一键部署GPT-SoVITS并实现音色克隆API调用
1. 为什么选择AutoDL部署GPT-SoVITS 第一次接触音色克隆技术时,我和很多人一样被两个问题困扰:本地电脑配置不够怎么办?复杂的Linux环境怎么配置?直到发现AutoDL这个云端算力平台,所有问题迎刃而解。这里实测用RTX3090…...
告别安装报错!Windows 10/11 保姆级 MySQL 5.7.44 配置指南(含my.ini文件详解)
Windows 10/11 下 MySQL 5.7.44 终极安装指南:从避坑到精通配置 每次在Windows系统上安装MySQL,总会有那么几个"经典"错误让人抓狂——服务启动失败、初始化报错、环境变量配置无效... 作为一个经历过无数次安装折磨的老手,我决定…...
