【C++】内联函数inline
文章目录
- 概念
- 使用
- 特性
- 原理
概念
C++中内联函数的出现解决了C语言宏函数的不足,类似于宏展开,这种在函数调用处直接嵌入函数体的函数称为内联函数,又称内嵌函数或内置函数。
以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数可以提升程序运行的效率。
使用
在函数的返回值前加上inline关键字即可。
#include<iostream>
using namespace std;
inline int Add(int x, int y)
{return x + y;
}
int main()
{int ret = Add(10,20);cout<<ret<<endl;return 0;
}
如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的调用。
特性
1)短小的,频繁调用的函数才适合声明为内联函数。要知道inline对于编译器而言只是一个建议,不是强制性的,编译器有自己的判断能力。
2)为什么函数体长了之后,内联函数不展开?
如果函数体代码比较长,如递归等,使用内联函数会导致代码膨胀。会导致编译后的程序存在多份相同的拷贝,编译出来的可执行程序也会非常大,会消耗更多的内存空间,如果指向函数体代码的时间比函数调用的开销大的多,那么inline效率收益会很小。
3)所以inline是一种空间换时间的做法(空间:由于函数体代码展开,编译出来的可执行程序大小/静态库,动态库/会变大)
4)综上,内联函数的缺点:可能会使目标文件变大;优点:少了调用开销,提高程序运行效率。
5)inline内联函数不建议声明和定义分离。


错误定义:声明和定义分离如下:

解决方法:直接在头文件中定义内联函数

原理
我们通过查看程序代码的反汇编语言,来了解一下inline函数的执行原理:
查看方式:
- 在release模式下,查看编译器生成的汇编代码中是否存在call Add
- 在debug模式下,需要对编译器进行设置,否则不会展开(因为debug模式下,编译器默认不会对代码进行优化,以下给出vs2013的设置方式)
先右击项目,点击项目属性。

我们先来看一段普通函数f的调用过程(通过查看debug下的汇编代码):

内联函数的原理即底层调用方式:

相关文章:
【C++】内联函数inline
文章目录概念使用特性原理概念 C中内联函数的出现解决了C语言宏函数的不足,类似于宏展开,这种在函数调用处直接嵌入函数体的函数称为内联函数,又称内嵌函数或内置函数。 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内…...
C++演讲比赛流程管理系统_黑马
任务 学校演讲比赛,12人,两轮,第一轮淘汰赛,第二轮决赛 选手编号 [ 10001 - 10012 ] 分组比赛 每组6人 10个评委 去除最高分 最低分,求平均分 为该轮成绩 每组淘汰后三名,前三名晋级决赛 决赛 前三名胜出 …...
谈谈低代码的安全问题,一文全给你解决喽
低代码是一种软件开发方法,通过使用图形化用户界面和可视化建模工具,以及自动生成代码的技术,使得开发人员可以更快速地构建和发布应用程序。 作为近些年软件开发市场热门之一,市面上也涌现了许多低代码产品,诸如简道云…...
[数据结构]二叉树OJ(leetcode)
目录 二叉树OJ(leetcode)训练习题:: 1.单值二叉树 2.检查两棵树是否相同 3.二叉树的前序遍历 4.另一棵树的子树 5.二叉树的构建及遍历 6.二叉树的销毁 7.判断二叉树是否是完全二叉树 二叉树OJ(leetcode)训练习题:: 1.单值二叉…...
flutter 输入时插入分隔符
每四位插入一个分隔符import package:flutter/services.dart;class DividerInputFormatter extends TextInputFormatter {final int rear; //第一个分割位数,后面分割位,,数final String pattern; //分割符DividerInputFormatter({this.rear 4, this.pattern });overrideTex…...
静态版通讯录——“C”
各位CSDN的uu你们好呀,之前小雅兰学过了一些结构体、枚举、联合的知识,现在,小雅兰把这些知识实践一下,那么,就让我们进入通讯录的世界吧 实现一个通讯录: 可以存放100个人的信息每个人的信息:名…...
前端基础开发环境搭建工具等
一、基本开发环境(软件)安装1、Vscode(代码编辑器)官网下载网址:https://code.visualstudio.com/2、nvm(node多版本管理器,每个node版本都有对应的npm版本)安装包下载地址࿱…...
华为OD机试题【IPv4 地址转换成整数】用 Java 解 | 含解题说明
华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:IPv4 地址转换成整数 题目 存在…...
[数据结构]排序算法
目录 常用排序算法的实现:: 1.排序的概念及其运用 2.插入排序 3.希尔排序 4.选择排序 5.冒泡排序 6.堆排序 7.快速排序 8.归并排序 9.排序算法复杂度及稳定性分析 10.排序选择题练习 常用排序算法的实现:: 1.排序的概念及其运用…...
不愧是2023年就业最难的一年,还好有车企顶着~
就业龙卷风已经来临,以前都说找不到好的工作就去送外卖,但如今外卖骑手行业都已经接近饱和状态了,而且骑手们的学历也不低,本科学历都快达到了30%了,今年可以说是最难找到工作的一年。 像Android 开发行业原本就属于在…...
C/C++之while(do-while)详细讲解
目录 while循环有两个重要组成部分: while 是一个预测试循环 无限循环 do-while 循环 while循环有两个重要组成部分: 进行 true 值或 false 值判断的表达式;只要表达式为 true 就重复执行的语句或块;图 1 显示了 while 循环的…...
SpringCloud学习笔记(一)认识微服务
一、微服务技术栈 二、单体架构和分布式架构的区别 1、单体架构: 将业务的所有功能集中在一个项目中开发,打成一个包进行部署 优点:架构简单,部署成本低缺点:耦合度高 2、分布式架构: 根据业务功能对系统…...
Unity中使用WebSocket (ws://)的方法
WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 WebSocket与http 其…...
米哈游春招算法岗-2023.03.19-第一题-交换字符-简单题
交换字符Problem Description 米小游拿到了一个仅由小写字母组成的字符串,她准备进行恰好一次操作:交换两个相邻字母,在操作结束后使得字符串的字典序尽可能大。 请你输出最终生成的字符串。 input 一个仅由小写字母组成的字符串,…...
能把爬虫讲的这么透彻的,没有20年功夫还真不行【0基础也能看懂】
前言 可以说很多人学编程,不玩点爬虫确实少了很多意思,不管是业余、接私活还是职业爬虫,爬虫世界确实挺精彩的。 今天来给大家浅谈一下爬虫,目的是让准备学爬虫或者刚开始起步的小伙伴们,对爬虫有一个更深更全的认知…...
springcloud学习总结
springcloud 构建微服务项目步骤 导入依赖编写配置文件开启这个功能 Enablexxx配置类 于2023年2月24日下午17点38分开始学习于2023年3月17日晚上20点26分学完总结代码地址:https://gitee.com/liang-weihao/StudySpringcloud学习笔记地址:https://www.…...
2022年亏损超10亿,告别野蛮成长的众安在线急需新“引擎”
2023年3月21日,众安在线披露了2022年财报,营收233.52亿元,同比增长6.44%;净亏损16.33亿元,去年同期净利润为11.6亿元,同比由盈转亏。 尽管众安在线再次身陷亏损的泥潭,但投资者却没有选择逃离。…...
ChatGPT文心一言逻辑大比拼(一)
❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...
【机器学习面试总结】————特征工程
【机器学习面试总结】————特征工程一、特征归一化为什么需要对数值类型的特征做归一化?二、类别型特征在对数据进行预处理时,应该怎样处理类别型特征?三、高维组合特征的处理什么是组合特征?如何处理高维组合特征?四、组合特征怎样有效地找到组合特征?五、文本表示模型…...
如何将字符串反转?
参考答案 使用 StringBuilder 或 StringBuffer 的 reverse 方法,本质都调用了它们的父类 AbstractStringBuilder 的 reverse 方法实现。(JDK1.8)不考虑字符串中的字符是否是 Unicode 编码,自己实现。递归1. public AbstractStrin…...
community:CANN开源社区治理指南
前言 想象一下,你开发了一个很棒的算子,想贡献给CANN社区,但不知道从哪入手——怎么提Issue?怎么提PR?代码规范是什么?会不会被拒绝? 我刚接触CANN开源社区那会,就是这样的——写了个…...
FCU1501嵌入式控制单元:工业物联网数据通信网关的硬件选型与开发实践
1. 项目概述:FCU1501,一个“非典型”嵌入式控制单元的诞生最近,嵌入式圈子里关于“数据通信网关”的讨论又热了起来。这玩意儿听起来高大上,但说白了,就是给各种设备、系统之间搭桥的“翻译官”和“交通警察”。传统上…...
开源架构企业管理软件适合哪些类型的公司
开源架构企业管理软件适合哪些类型的公司 很多人一听到“开源架构”,第一反应是技术人员、开发者、极客项目。放到企业管理软件里,其实开源架构更像一种长期可控的建设方式:企业能看见系统如何运行,也能在需要时改造它。 对中小…...
精准监测,畅行无阻——DX-SZ3200系列在交通领域的应用
在铁路、高速及各类交通系统中,信号监测与管理的精准性和实时性至关重要。DX-SZ3200系列数字化射频实时频谱侦测接收机模块,凭借其卓越的性能和广泛的应用场景,成为了交通领域信号监测的得力助手。DX-SZ3200系列模块集成了先进的数字化射频接…...
【Typescript】13-tsconfig与工程化实践
tsconfig 与工程化实践 很多人学 TypeScript 时,会把注意力几乎全部放在语法上:泛型会不会写、infer 看不看得懂、工具类型会不会用。可真正在工程里决定 TypeScript 上限的,往往不是这些,而是 tsconfig.json。因为它决定了编译器…...
B-H 曲线 vs B-P 曲线|磁芯材料两大核心曲线详解
一、B-H 曲线:描述磁芯 “能不能导磁、会不会饱和” 1. 它是什么? 全称:B-H 磁化曲线 定义:磁感应强度 B(单位:T)与磁场强度 H(单位:A/m)的关系曲线 物理意义:反映磁芯材料在磁场中的磁化特性,决定磁导率、饱和磁通密度。 2. 核心作用 计算磁路磁阻、电感值; 判断…...
2026 年 AI 毕业论文工具横评:okbiye 领衔,9 款工具实测对比,帮你避开 90% 的写作坑
okbiye-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPT毕业论文 - Okbiye智能写作https://www.okbiye.com/ai/bylw 一、前言:AI 写论文,别只盯着 “一键生成” 毕业论文写作,是每个大学生都绕不开的关卡。从选题定方向、…...
JMeter+DeepSeek实现性能测试报告自动化与智能脚本生成
1. 这不是“AI写报告”,而是把性能测试工程师从重复劳动里解放出来的实操路径 你有没有过这样的经历:凌晨两点还在手动整理JMeter的.jtl结果文件,Excel里堆着几十列响应时间、错误率、吞吐量,再复制粘贴到Word里写“本次压测在200…...
2026 年 5 月消防刷题不提分?高质量刷题工具实测指南
2026 年消防设施操作员考试侧重实操应用与智慧消防,题型灵活性大幅提升,超 68% 考生面临刷题量大但分数停滞的困境。核心痛点集中在:消防设施操作员模拟题质量差、与真题命题逻辑不符(相似度低于 62%)、消防设施操作员…...
赛场制胜参考 CTF 全套 50 个经典解题思路
CTF选手必藏的50个实战解题思路!一篇够用! CTF竞赛的核心逻辑 • 核心目标:快速拆解问题(Flag导向)、工具链协作、模式化思维。• 关键原则:先广度后深度(优先收集信息)、分治策略&…...
