【c++速通】入门级攻略:什么是内联函数?函数重载又是什么?

文章目录
- 📑前言
- 🌤️函数重载
- ☁️函数重载的概念
- ☁️函数重载的作用
- ☁️C++支持函数重载的原理
- 🌤️内联函数
- ☁️内联函数的概念
- ☁️内联函数的作用
- ☁️内联函数的特性
- 🌤️全篇总结
📑前言
在上一篇文章中我们了解到了命名空间和缺省函数的存在,以及C++为什么要引入它们。本章将继续C++在C语言上扩展出的语法,以帮助大家快速入门。函数竟然还有内联的形式?函数重载,重载的是什么?本篇文章都将会做讲解。
🌤️函数重载
☁️函数重载的概念
是指在同一个作用域内,可以有多个同名函数,但它们的参数列表必须不同(参数类型、参数个数或参数顺序不同)
☁️函数重载的作用
- 提高代码的可读性和可维护性:通过使用相同的函数名来表示一组相关的功能,可以使代码更加清晰和易于理解。
- 简化函数调用:不同的参数列表可以根据不同的情况选择合适的函数进行调用,避免了编写大量的条件判断语句。
- 提供更多的灵活性:通过函数重载,可以根据需要提供多种不同的函数实现,满足不同的需求。
☁️C++支持函数重载的原理
C++支持函数重载,但是C语言不支持函数重载,这是为什么呢?
在C/C++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接 。


-
实际项目通常是由多个头文件和多个源文件构成,当前a.cpp中调用了b.cpp中定义的Add函数时,编译后链接前,a.o的目标文件中没有Add的函数地址,因为Add是在b.cpp中定义的,所以Add的地址在b.o中。那么怎么办呢?
-
链接阶段就是专门处理这种问题,链接器看到a.o调用Add,但是没有Add的地址,就会到b.o的符号表中找Add的地址,然后链接到一起。
-
链接时,面对Add函数,链接接器会使用哪个名字去找呢?这里每个编译器都有自己的函数名修饰规则。
Windows下vs修饰规则过于复杂,Linux下g++修饰规则简单易懂,下面使用g++演示这个修饰后的名字。
C语言编译后:函数名字的修饰没有发生改变。

C++编译后:函数名字的修饰发生改变,编译器将函数参数类型信息添加到修改后的名字中。

以上我们可以看出gcc的函数修饰后名字不变。而g++的函数修饰后变成【_Z+函数长度+函数名+类型首字母】。
这里就理解了C语言没办法支持重载,因为同名函数没办法区分。而C++是通过函数修饰规则来区分,只要参数不同,修饰出来的名字就不一样,就支持了重载。
如果两个函数函数名和参数是一样的,返回值不同是不构成重载的,因为调用时编译器没办法区分。
🌤️内联函数
☁️内联函数的概念
内联函数是一种特殊的函数,它在调用时会被直接展开,而不是通过函数调用的方式进行执行。它通常被用来替代宏,以提高代码的执行效率和可读性。


如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的调用.
☁️内联函数的作用
- 提高代码的执行效率:由于内联函数在调用时会被直接展开,避免了函数调用的开销,可以减少函数调用的时间消耗。
- 提高代码的可读性:内联函数可以将一些简单的代码片段直接嵌入到调用处,使代码更加紧凑和易于理解。
☁️内联函数的特性
- 函数体内的代码比较简单:由于内联函数在调用时会被直接展开,因此函数体内的代码应该比较简单,避免展开后的代码过于庞大。
- 函数体内不能有循环语句和递归调用:由于内联函数在调用时会被直接展开,如果函数体内有循环语句或递归调用,展开后的代码可能会过于庞大,影响代码的执行效率。
- 函数声明和定义必须放在同一个文件中:为了能够在调用处展开函数体,编译器需要在调用处获得函数的定义,因此函数的声明和定义必须放在同一个文件中。
- 内联函数适用于频繁调用、代码量较小的函数:由于内联函数在调用时会被直接展开,因此适用于频繁调用、代码量较小的函数。对于代码量较大的函数,由于展开后的代码可能会过于庞大,可能会导致可执行文件的体积增大,从而反而降低代码的执行效率。

🌤️全篇总结
本章我们知道了函数重载和内联函数的作用和特性使用,他们在以后的使用场景出现的频率是很高的。
☁️ 好了,由于篇幅有限,本章只讲解了两个点,后面还有几个点,后续会再出两篇文章,看完这些,你的c++就算是入门啦!
看到这里了还不给博主留个:
👍 点赞🌟收藏 ⭐️ 关注!
💛 💙 💜 ❤️ 💚💓 💗 💕 💞 💘 💖
拜托拜托这个真的很重要!
你们的点赞就是博主更新最大的动力!
有问题可以评论或者私信呢秒回哦。

相关文章:
【c++速通】入门级攻略:什么是内联函数?函数重载又是什么?
🎥 屿小夏 : 个人主页 🔥个人专栏 : C入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言🌤️函数重载☁️函数重载的概念☁️函数重载的作用☁️C支持函数重载的原理…...
ubuntu 安装串口工具和添加虚拟串口
目录 一、串口工具安装 二、使用Windows本身虚拟的串口 (一)添加串口 1、保证虚拟机是关闭状态,打开“虚拟机设置”,点击“添加”。 2、选中“串行端口”,点击“完成”。 3、选中刚添加的串口,下拉选…...
【数据结构】数组和字符串(四):特殊矩阵的压缩存储:稀疏矩阵——三元组表
文章目录 4.2.1 矩阵的数组表示4.2.2 特殊矩阵的压缩存储a. 对角矩阵的压缩存储b~c. 三角、对称矩阵的压缩存储d. 稀疏矩阵的压缩存储——三元组表结构体初始化元素设置打印矩阵主函数输出结果代码整合 4.2.1 矩阵的数组表示 【数据结构】数组和字符串(一ÿ…...
为什么POST请求经常发送两次?
大多数初级前端程序员,在通过浏览器F12的调试工具调试网络请求时,可能都会有一个发现,在进行POST请求时,明明代码里只请求了一次,为什么network里发送了两次呢,难道我代码出bug了?带着疑问点开第…...
打破总分行数据协作壁垒,DataOps在头部股份制银行的实践|案例研究
从银行开始建设数据仓库至今已近20年,当前各银行机构在数据能力建设中面临诸多困扰:如何保证数据使用时的准确性?如何让数据敏捷响应业务变化?如何让更多的业务人员使用数据? 这些问题极大影响了经营指标的达成与业务…...
测试用例的设计方法(全):边界值分析方法
一.方法简介 1.定义:边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。 2.与等价划分的区别 1)边界值分析不是从某等价类中随便挑…...
酷开科技 | 酷开系统沉浸式大屏游戏更解压!
随着家庭娱乐需求日益旺盛,越来越多的家庭消费者和游戏玩家开始追求大屏游戏带来的沉浸感。玩家在玩游戏的时候用大屏能获得更广阔的视野和更出色的视觉包围感,因此用大屏玩游戏已经成为了一种潮流。用酷开系统玩大屏游戏,过瘾又刺激…...
读高性能MySQL(第4版)笔记20_Performance Schema和其他
1. 线程 1.1. MySQL服务端是多线程软件。它的每个组件都使用线程 1.2. 每个线程至少有两个唯一标识符 1.2.1. 操作系统线程ID 1.2.2. MySQL内部线程ID 2. 对象类型 2.1. OBJECT_TYPE列 2.2. EVENT 2.3. FUNCTION 2.4. PROCEDURE 2.5. TABLE 2.6. TRIGGER 3. Perfor…...
spring cloud Eureka集群模式搭建(IDEA中运行)《二》
上一篇集群配置文件完善 上一篇博客,想必大家都学会了Eureka集群模式的搭建和运行,针对上一篇的配置文件进行了优化,在这里分享给大家。上一篇主要有3个配置文件,分别对应3个不同的服务,这种形式配置文件分别写在了不…...
大模型(LLM)在电商推荐系统的探索与实践
本文对LLM推荐的结合范式进行了梳理和讨论,并尝试将LLM涌现的能力迁移应用在推荐系统之中,利用LLM的通用知识来辅助推荐,改善推荐效果和用户体验。 背景 电商推荐系统(Recommend System,RecSys)是一种基于…...
C语言之指针详解
目录 地址 指针的定义和使用 数组与指针的区别与联系 字符串与指针的用法 C 中的 NULL 指针 指针的算术运算 指向指针的指针 传递指针给函数 从函数返回指针 在学习指针之前,我们先弄清楚一个概念: 地址 地址在计算机内存中是一个唯一的标识符…...
【Java笔记+踩坑】设计模式——原型模式
导航: 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/黑马旅游/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码-CSDN博客 目录 零、经典的克隆羊问题(复制10只属性相同的羊) 一、传统方案࿱…...
Flutter GetX使用详解
介绍 GetX是一款功能强大且轻量级的Flutter状态管理和路由管理库。它提供了一种简单而强大的方式来构建Flutter应用程序,无需大量的模板代码。GetX不仅提供了状态管理和路由管理,还包括其他实用工具,如国际化和依赖注入。 在本文中…...
【ARM Coresight 系列文章 3.3 - ARM Coresight SWD 协议详细介绍】
文章目录 1.1 SWD 协议框图1.2 读/写时序及命令1.2.1 SWD 时序1.2.2 SWD 命令详情1.3 芯片探测1.3.1 获取芯片 ID1.4 读/写操作1.1 SWD 协议框图 SWD协议可以配置SoC内部几乎所有的寄存器。时钟信号由SWCLK 管脚输入,数据信号从SWDIO管脚输入输出。首先 HOST 对SW-DP 进行操作…...
作为开发者,可视化开发工具了解一下
你是否为编程世界的各种挑战感到头痛?想要以更高效、简单的方式开发出专业级的项目? JNPF低代码工具正是你苦心寻找的产品!它是一款专为稍微懂一点点编程思想的入门级人员设计的神奇工具,集成了丰富的功能和组件,让你轻…...
Python:实现日历功能
背景 日常生活中,每天都要用到日历,日历成为我们生活中的必需品,那么如何制作日历呢,其实方法有很多,可以直接在excel中制作,也可以手画等等。 学习过编程的朋友,能否想到用Python编写一…...
2.9.C++项目:网络版五子棋对战之业务处理模块的设计
文章目录 一、意义二、功能三、管理(一)客户端请求(二)websocket 四、框架五、完整代码 一、意义 将所有的模块整合在一起,通过网络通信获取到客户端的请求,提供不同的业务处理。 服务器模块,是…...
springboot actuator 常用接口
概述 微服务作为一项在云中部署应用和服务的新技术是当下比较热门话题,而微服务的特点决定了功能模块的部署是分布式的,运行在不同的机器上相互通过服务调用进行交互,业务流会经过多个微服务的处理和传递,在这种框架下࿰…...
知识点滴 - Email地址不区分大小写
电子邮件地址本身对字符大小写不敏感。这意味着实际的电子邮件地址,如 "exampleemail.com",并不区分字母的大小写。无论你输入的是大写字母还是小写字母,它仍然会到达同一个电子邮件账户。例如,如果您的电子邮件地址是 …...
同一个页面同一区域两个el-table在v-if下样式重叠问题
🍉正常情况下在radio切换时两个表格的样式应如下 🍉实际上用v-if显示时会出现以下问题(本该属于时间段相同模块的表格却出现在时间段自定义的表格中) 🍉解决方案: 🍃一、将v-if替换成v-show(…...
Nunchaku FLUX.1-dev 文生图技术解析:卷积神经网络在图像生成中的角色
Nunchaku FLUX.1-dev 文生图技术解析:卷积神经网络在图像生成中的角色 最近在尝试各种文生图模型时,Nunchaku FLUX.1-dev 的表现让我印象深刻。它生成的图片不仅细节丰富,而且风格多样,从写实到抽象都能驾驭得很好。这让我不禁好…...
mPLUG视觉问答效果展示:交通标志识别、菜单文字理解、图表数据问答
mPLUG视觉问答效果展示:交通标志识别、菜单文字理解、图表数据问答 获取更多AI镜像 想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,…...
DSP28335 EPWM模块关键寄存器配置实战指南
1. EPWM模块基础与核心寄存器概览 DSP28335的增强型PWM(EPWM)模块是电机控制、电源转换等实时控制系统的核心外设。我第一次接触这个模块时,被它强大的灵活性震撼到了——6对独立的EPWM通道,每对都能生成两路互补或独立的PWM波形。…...
雪女-斗罗大陆-造相Z-Turbo系统管理:Ubuntu服务器运维与模型服务监控
雪女-斗罗大陆-造相Z-Turbo系统管理:Ubuntu服务器运维与模型服务监控 想让你的“雪女”模型在Ubuntu服务器上像真正的封号斗罗一样,拥有稳定、可靠、持久的战斗力吗?对于任何投入生产环境的AI服务来说,部署成功只是第一步&#x…...
手把手调试Linux DRM:如何用ftrace和debugfs深入connector的生命周期
深入Linux DRM调试:用ftrace与debugfs剖析connector全生命周期 当一块崭新的显示板卡接入系统时,DRM驱动中的connector如同一位尽职的接线员,负责建立显示设备与内核之间的通信桥梁。但在实际开发中,我们常会遇到热插拔检测失灵、…...
OpenClaw飞书机器人配置:Qwen3-32B私有镜像对话触发详解
OpenClaw飞书机器人配置:Qwen3-32B私有镜像对话触发详解 1. 为什么选择OpenClaw飞书Qwen3-32B组合 去年底我开始尝试用AI自动化处理团队日常事务时,发现市面上大多数方案要么需要将敏感数据上传到第三方平台,要么只能完成简单的问答交互。直…...
STM32F103精英板实战:手把手教你移植开源Modbus主机库,实现稳定主从通信
STM32F103精英板实战:手把手教你移植开源Modbus主机库,实现稳定主从通信 Modbus协议作为工业自动化领域最常用的通信协议之一,其简单可靠的特性使其在各种嵌入式设备中广泛应用。对于使用STM32F103系列开发板的工程师来说,如何快速…...
多模态大模型入门:从CLIP到Qwen-VL,手把手教你搭建第一个视觉语言模型
多模态大模型实战:从CLIP到Qwen-VL的视觉语言探索之旅 当一张图片胜过千言万语时,多模态大模型正在重新定义人机交互的边界。想象一下,上传一张街景照片,AI不仅能识别出咖啡馆招牌上的文字,还能根据店内装修风格推荐适…...
终极指南:解决Embassy嵌入式框架编译错误的10个技巧
终极指南:解决Embassy嵌入式框架编译错误的10个技巧 【免费下载链接】embassy Modern embedded framework, using Rust and async. 项目地址: https://gitcode.com/gh_mirrors/em/embassy Embassy是一个使用Rust和async/await的现代嵌入式框架,但…...
WindowsCleaner:智能化解救C盘空间危机的开源解决方案
WindowsCleaner:智能化解救C盘空间危机的开源解决方案 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 一、痛点剖析:C盘空间管理的深层困境…...
