【C++】 C++入门—内联函数
C++入门
- 1 内联函数
- 1.1 定义
- 1.2 查看方式
- 1.3 注意
- Thanks♪(・ω・)ノ谢谢阅读
- 下一篇文章见!!!
1 内联函数
1.1 定义

程序在执行一个函数前需要做准备工作:要将实参、局部变量、返回地址以及若干寄存器都压入栈中,然后才能执行函数体中的代码;函数体中的代码执行完毕后还要清理,将之前压入栈中的数据都出栈,然后接着执行函数调用位置以后的代码。
在函数较大时,执行函数需要较多时间,那么函数调用的时间可以忽略不计,
但是当函数较小时(比如求和,交换等简单函数),函数调用的时间就不可以忽略了。再加上如果频繁调用,那么就会有大部分时间花在函数调用上。
而内联函数是直接把函数加入其中,免去调用的时间开销。
以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调 用建立栈帧的开销,内联函数提升程序运行的效率。
类似于C语言中的宏展开(宏的缺陷较多)。
1.2 查看方式
查看方式:
- 在release模式下,查看编译器生成的汇编代码中是否存在call Add
- 在debug模式下,需要对编译器进行设置,否则不会展开(因为debug模式下,编译器默认不会对代码进行优化,以下给出 vs2022 的设置方式)

这下就可以看出内敛函数的优化了,如下:直接把函数插入 其中。

1.3 注意
- inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运行效率。
- inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,一般建议:
将函数规模较小(即函数不是很长,具体没有准确的说法,取决于编译器内部实现)、不是递归、且频繁调用的函数采用inline修饰,否则编译器会忽略inline特性。
《C++prime》第五版关于inline的建议:
内联说明只是向编译器发出请求,编译器可以选择忽略这个请求。 - inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到。
不可忽略的一点是:
代码膨胀,我们本身是1万行的主函数,如果有个 1万 行的函数,调用了100次。
使用内联函数: 结果是展开100次,我们的代码编译后就会变成100万行
不使用内联函数:函数会在栈区开辟空间,100次调用同一位置的函数,我们的代码是 2 万行
这样差距还是很大的。
Thanks♪(・ω・)ノ谢谢阅读
下一篇文章见!!!
相关文章:
【C++】 C++入门—内联函数
C入门 1 内联函数1.1 定义1.2 查看方式1.3 注意 Thanks♪(・ω・)ノ谢谢阅读下一篇文章见!!! 1 内联函数 1.1 定义 程序在执行一个函数前需要做准备工作:要将实参、局部变量、返回地址以及若干寄存…...
软件工程知识梳理2-需求分析
需求分析时软件定义的最后一个阶段,它的基本任务时准确回答系统必须做什么的问题。 输出:本阶段必须的输出时软件需求规格说明书。 角色:需求分析员 参与者:用户、需求分析员 需求分析遵循的准则: 必须理解并描述问…...
mac裁剪图片
今天第一次用mac裁剪图片,记录一下过程,差点我还以为我要下载photoshop了, 首先准备好图片 裁剪的目的是把图片的标题给去掉,但是不能降低分辨率,否则直接截图就可以了 解决办法 打开原始图片(不要使用预览…...
Compose | UI组件(十) | Box,Surface - 帧布局
文章目录 前言Box 组件的参数说明Box 组件的使用Surface 的参数说明Surface 的使用 总结 前言 Box组件是 按子组件依次叠加 的布局组件,相当传统View中的 FrameLayout Box 组件的参数说明 Composable inline fun Box(modifier: Modifier Modifier, …...
种草日记|林曦老师的冬日好物分享
冬天将尽春天就要来了,换季的时候最容易引起皮肤干燥、头发毛躁不舒服的问题,今天就来说说林曦老师推荐的冬日护理爱用好物。大家都要“如婴儿乎”,照顾好自己哦~ 1、Aco甘油保湿霜 Aco甘油保湿霜好大一罐&#x…...
【算法与数据结构】139、LeetCode单词拆分
文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:本题可以看做一个动态规划问题。其中,字符串s是背包,而字典中的单词就是物品。…...
NLP任务之Named Entity Recognition
深度学习的实现方法: 双向长短期记忆网络(BiLSTM): BiLSTM是一种循环神经网络(RNN)的变体,能够捕捉序列数据中的长期依赖关系。在NER任务中,BiLSTM能有效地处理文本序列,捕捉前后文本…...
NUXT3项目实践总结
目录 一、NUXT3实现黑夜白天模式切换 需求 实现 效果 二、scrollreveal插件实现动画效果 需求 实现 封装 使用 文档 效果 三、useSeoMeta的使用 作用 使用 效果 四、NUXT3开启代理 使用 注意 五、$fetch、useFetch 、useAsyncData的区别 六、错误页面处理 …...
中科星图——2020年全球30米地表覆盖精细分类产品V1.0(29个地表覆盖类型)
数据名称: 2020年全球30米地表覆盖精细分类产品V1.0 GLC_FCS30 长时序 地表覆盖 动态监测 全球 数据来源: 中国科学院空天信息创新研究院 时空范围: 2015-2020年 空间范围: 全球 数据简介: 地表覆盖分布…...
Tomcat 部署项目时 war 和 war exploded区别
在 Tomcat 调试部署的时候,我们通常会看到有下面 2 个选项。 是选择war还是war exploded 这里首先看一下他们两个的区别: war 模式:将WEB工程以包的形式上传到服务器 ;war exploded 模式:将WEB工程以当前文件夹的位置…...
【开源】SpringBoot框架开发天然气工程运维系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程 12.2.2 流程 22.3 各角色功能2.3.1 系统管理员功能2.3.2 用户服务部功能2.3.3 分公司(施工单位)功能2.3.3.1 技术员角色功能2.3.3.2 材料员角色功能 2.3.4 安…...
go数据操作-MySQL
1.快速入门 下载依赖 go get -u github.com/go-sql-driver/mysql使用MySQL驱动 func Open(driverName, dataSourceName string) (*DB, error)Open打开一个dirverName指定的数据库,dataSourceName指定数据源,一般至少包括数据库文件名和其它连接必要的…...
基于node.js和Vue3的医院挂号就诊住院信息管理系统
摘要: 随着信息技术的快速发展,医院挂号就诊住院信息管理系统的构建变得尤为重要。该系统旨在提供一个高效、便捷的医疗服务平台,以改善患者就医体验和提高医院工作效率。本系统基于Node.js后端技术和Vue3前端框架进行开发,利用其…...
Django如何调用机器学习模型进行预测
Django是一个流行的Python Web框架,它可以很方便地集成机器学习模型,进行预测和推理。我将介绍如何在Django项目中调用训练好的机器学习模型,并实现一个预测接口。 准备工作 首先我们需要一个训练好的机器学习模型。这里我们使用Scikit-Learn训练一个简单的线性回归模型作为示…...
Web3.0初探
Web3.0初探 一、互联网发展史二、什么是Web3.0?三、现在的发展方向(衍生出来的产品):四、目前问题五、Web3.0与元宇宙 一、互联网发展史 Web3.0也就是第三代互联网。最新版本的Web3.0是以太坊的创始合伙人Gavin Wood在2014年提出…...
在windows和Linux中的安装 boost 以及 安装 muduo 和 mysql
一、CMake安装 Ubuntu Linux 下安装和卸载cmake 3.28.2版本-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135960115?spm1001.2014.3001.5501二、安装boost boost官网:boost官网 我下载的boost版本: windows:boost_1_84_0.zipli…...
WPOpenSocial实现WordPress的QQ登录
个人建站不可避免的需要自己搭建用户数据库的问题,可用户却往往因为注册繁琐而放弃浏览您的网站,由此可见,一个社交账号一键登录方式尤为重要。选择适合您网站需求的社交插件,可以提升用户互动,增加社交分享࿰…...
关于我用AI编写了一个聊天机器人……(7)
此次更新为v1.3.4版本,更新内容:增加显示时间功能 代码如下: #include <bits/stdc.h> #include <ctime> using namespace std; string userInput; class VirtualRobot { public:void chat() {cout << "你好&#x…...
WebService的services.xml问题
WebService有多种实现方式,这里使用的是axis2 问题: 在本地开发,访问本地的http://localhost:8080/services/ims?wsdl,正常访问 但是打成jar包,不管是linux还是window启动,都访问不到,报错…...
永久删除 Elasticsearch 中的主节点
Elasticsearch 是一个开源分布式搜索和分析引擎,用于各种任务,例如全文搜索、日志分析和实时数据分析。 Elasticsearch 集群由一个或多个节点组成,每个节点可以具有多种角色,包括主节点(master node)、数据…...
原神玩家效率革命:BetterGI开源自动化解决方案全解析
原神玩家效率革命:BetterGI开源自动化解决方案全解析 【免费下载链接】better-genshin-impact 🍨BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动派遣 | 一键强化 - UI Automation Testing Tools For …...
ROS机器人开发实战:利用tf2库高效处理四元数、欧拉角与旋转矩阵的转换
1. 为什么机器人开发需要处理多种姿态表示 在机器人开发中,我们经常需要处理各种姿态数据。无论是移动机器人的定位信息、机械臂末端执行器的位姿,还是传感器数据的融合,都离不开对物体在三维空间中位置和朝向的描述。但有趣的是,…...
Agent能为中小企业降本增效吗?深度拆解AI Agent在企业智能自动化的落地路径
在2026年这一关键的时间节点上,AI Agent能否为中小企业实现实质性的降本增效,已经从一个理论命题转变为大规模的实践成果。随着大模型技术的深度演进,AI Agent不再仅仅是简单的对话机器人,而是进化为具备自主规划、决策与执行能力…...
通义千问1.5-1.8B-Chat-GPTQ-Int4实战:构建智能软件测试用例生成器
通义千问1.5-1.8B-Chat-GPTQ-Int4实战:构建智能软件测试用例生成器 如果你是一名软件测试工程师,下面这个场景你一定不陌生:产品经理扔过来一份几十页的需求文档,或者开发同学更新了一个复杂的接口,而你需要在短时间内…...
基于向量数据库的AI知识管理:开源工具如何实现知识处理效率提升300%
基于向量数据库的AI知识管理:开源工具如何实现知识处理效率提升300% 【免费下载链接】open-notebook An Open Source implementation of Notebook LM with more flexibility and features 项目地址: https://gitcode.com/GitHub_Trending/op/open-notebook 副…...
Ext2Read:终极Windows读取Linux分区解决方案,3分钟快速上手
Ext2Read:终极Windows读取Linux分区解决方案,3分钟快速上手 【免费下载链接】ext2read A Windows Application to read and copy Ext2/Ext3/Ext4 (With LVM) Partitions from Windows. 项目地址: https://gitcode.com/gh_mirrors/ex/ext2read 你是…...
NVIDIA vGPU许可服务器HA配置避坑指南:从环境准备到故障切换测试
NVIDIA vGPU许可服务器高可用配置实战:从零搭建到容灾验证 在虚拟化与AI计算融合的今天,NVIDIA vGPU技术已成为图形工作站、云游戏和机器学习平台的核心支撑。但许多团队在享受显卡虚拟化红利时,往往忽略了许可服务的高可用保障——当单点故障…...
模型航空喷气发动机CAD全套图纸(32张)
模型航空喷气发动机CAD学习资料是一套针对航空模型动力系统设计的系统性资源,涵盖从整体结构到局部零件的详细设计思路。32张图纸以标准化工程语言呈现,包含发动机外壳、燃烧室、涡轮组件、进气导管等核心模块的二维与三维视图,通过精确的线条…...
个人时间管理神器:OpenClaw+百川2-13B自动分析日历与待办
个人时间管理神器:OpenClaw百川2-13B自动分析日历与待办 1. 为什么需要AI助手管理时间? 作为一个长期被多线程工作困扰的技术从业者,我一直在寻找能够真正理解时间管理需求的智能工具。传统的日历应用只能被动记录日程,而待办清…...
中关村论坛重磅发布十五项脑机接口成果
当前,脑机接口技术正处于从实验室走向临床应用、从技术突破迈向产业转化的关键时期。中关村论坛重磅发布十五项脑机接口创新成果,聚焦学术创新性、产品合规性、临床突破性与生态共建性四大核心维度,集中呈现我国在该领域的前沿进展。本次发布…...
