【C++】内联函数理解

article/2025/9/17 3:50:34

内联函数

内联函数的使用是对于C语言中宏函数的一种改进,他继承了宏的优点并避免了宏的缺点。
宏的优点:a. 代码复用性高 b. 宏函数减少栈帧建立,提高效率
宏的缺点:a. 可读性差 b. 没有类型安全检查 c. 不方便调试
C++基本不再建议使用宏,而是建议尽量使用constenumInline去替代宏。

inline修饰的函数就叫做内联函数。inline在符合条件的情况下,编译时C++编译器会在调用内联函数的地方进行展开,此时就没有建立栈帧的开销,提高了程序运行的效率。

内联函数展开的查看方式:

(VS2019-Debug为例)
在这里插入图片描述
在这里插入图片描述
在不使用inline情况下查看汇编代码:

/*inline */int ADD(int x, int y)
{return x + y;
}int main()
{/*int ret1 = */ADD(1, 2);/*int ret2 = */3 * ADD(1, 2);return 0;
}

在这里插入图片描述
使用inline后查看汇编代码:

inline int ADD(int x, int y)
{return x + y;
}

在这里插入图片描述
这里编译器优化太过了,汇编代码没有显示,可以尝试通过接收返回值来查看。
在这里插入图片描述
可以看到汇编代码中没有了call指令,而是将函数在调用的地方直接展开来使用了。

内联函数特性:

  1. inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会使用函数体替换函数调用。这样做可能会使目标文件变得很大(缺点),但少了函数调用开销,提高了程序运行效率(优点)。
  2. inline对于编译器只是一个建议,编译器会自动优化。一般建议:将函数规模较小(即函数不是很长,具体没有准确地说法,取决于编译器的内部实现)、不是递归频繁调用的函数采用inline修饰,否则编译器会忽略掉inline特性。

一般来说,内联机制用于优化规模较小、流程直接、频繁调用的函数。很多编译器都不支持内联递归函数,而且一个75行的函数也不大可能在调用点内联地展开。 —— 《C++ prime》

以下是inline函数内部不同指令长度情况下,编译器自动对内联函数展开与否所做出的判断结果。
在这里插入图片描述
在这里插入图片描述
3. inline不建议声明和定义分离,这样会导致链接错误。因为inline被展开了,就没有函数地址了,链接时就会找不到。

//func.h
inline int func(int x, int y);//func.cpp
#include "func.h"int func(int x, int y)
{int ret = 0;ret = x + y;ret = x - y;ret = x * y;ret = x / y;return ret;
}//test.cpp
#include "func.h"int main()
{int ret = func(1, 2);return 0;
}

在这里插入图片描述
所以再使用内联函数时,可以将inline函数的定义放在.h文件中。

//func.h
inline int func(int x, int y)
{int ret = 0;ret = x + y;ret = x - y;ret = x * y;ret = x / y;return ret;
}

http://chatgpt.dhexx.cn/article/RAV9LurR.shtml

相关文章

在什么情况下方法调用会被内联?

写在前面 本文隶属于专栏《100个问题搞定Java虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和文献引用请见100个问题搞定Java虚拟机 解答 方法内联有许多规则。…

【C++】 内联函数详解(搞清内联的本质及用法)

目录 一.什么是内联函数 1.直观上定义: 2.更深入的思考: 二.为什么使用内联函数 1.为什么要代替部分宏定义 2.普通函数频繁调用的过程消耗栈空间 3.更深入的思考 三.内联函数和编译过程的相爱相杀 四.内联函数怎么用,在哪儿用&#…

[C++] 内联函数inline 以及 auto关键字 -- C++入门(4)

本篇文章主要包括内联函数和auto关键字。其中,内敛函数包括概念,特性等;auto关键字的使用规则,使用场景等。 目录 1.内敛函数 1.1问题引入: 1.2内联函数的概念 1.3内敛函数的特性 2.auto关键字 2.1auto简介 2.2 auto的…

Windows误删注册表恢复方法

昨天不小心把注册表给删了,期间一直找解决方法,因为没有usb等重装工具... 我把注册表的HKEY_LOCAL_MACHINE\software这个重要的东西给误删了 ---结果就是软件打不开.就连删除东西都没用,自带的cmd什么的系统工具打不开... 关机重启问题更严重了,直接蓝屏,但是还好,开机的时候…

Linux 误删文件恢复命令及方法

你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 http://r6d.cn/JzNf 推荐:https://www.xttblog.com/…

win10误删的注册表能还原吗_win10自带注册表恢复方法 win10注册表误删如何修复...

系统注册表,是计算机中一个很重要的部件,没有人可以保证自己能记住所有的注册表项,如果不小心让注册表被修改或者其他原因让注册表失效的时候,我们就可以通过cmd对注册表进行恢复,下面小编就为大家介绍win10自带注册表…

成功恢复 Linux 系统中已删除的文件

点击关注公众号,回复“1024”获取2TB学习资源! 当用户意外地删除了一个仍然需要的文件时,大多数情况下,是没有简便的方法可以重新找回或重建这个文件。不过,幸运的是文件是可以通过一些方法恢复的。当用户删除了一个文…

windows注册表操作——备份,还原注册表,清除注册表卸载残留信息

注册表包含在操作过程中Windows不断引用的信息,例如每个用户的配置文件、计算机上安装的应用程序以及每个用户可以创建的文档类型、文件夹和应用程序图标的 属性表 设置、系统上存在的硬件以及所使用的端口。 序言 注册表是Microsoft Windows中的一个重要的数据库…

Linux下达梦误删除文件后恢复步骤

目录 数据文件恢复1.测试环境准备2.删除数据文件3.恢复步骤4.使用限制5.官方资料 redo日志恢复1. 删除redo日志2.启动数据库3.查看建库参数4.初始化新实例5.拷贝redo文件6.修改db_magic值7.启动数据库8.错误示范9.迁移数据 官方社区 数据文件恢复 1.测试环境准备 1.1准备好测…

windows注册表恢复方法

如果可以进入安全模式,您可以在安全模式内调用命令提示符输入命令修复一下系统组件。 在管理员命令提示符下键入以下命令: Dism /Online /Cleanup-Image /ScanHealth 这条命令将扫描全部系统文件并和官方系统文件对比,扫描计算机中的不一致…

linux环境下恢复rm误删的文件

文章目录 前言rm之后还有救吗使用foremost找回文件使用extundelete找回文件 预防误删引发的事故总结 前言 一提到在 linux 环境下删除文件,那绝对离不开 sudo rm -rf /* 这个梗,每次看到这个命令,我都想到一幅恶搞的图片: 这个『…

如何恢复 Linux 系统下被删除的文件 ?

丢失数据是任何用户都可能经历的最令人不安和痛苦的经历之一。一旦珍贵数据被删除或丢失,就再也找不不回来通常会引发焦虑,让用户感到无助。值得庆幸的是,有几个工具可以用来恢复 Linux 机器上被删除的文件。我们尝试了一些数据恢复工具&…

入门版Linux上恢复误删除的文件

一、被删除的文件正在被进程使用: 当某个文件正在被某个程序使用时,linux针对该文件有回两个计数器: i_count计数器:该文件可能被多个进程使用,每一个进程使用该文件,i_count数值都会加1。反之&#xff0…

不小心误删注册表exe,所有exe程序无法运行

首先我陈述下误删的原因吧,与其说是误删不如说就是自己有 意删除的,电脑Windows7,我在安装CASS10.1的时候,由于一个补丁程序始终不能运行,弹框显示说CASS10.1.6补丁.exe不是有效的Win32应用程序。然而我去寻找解决办法…

如何恢复Linux中的误删文件

写在前面的话 在开始教程之前我有必要提醒大家,使用窗口管理器(GUI)删除文件和使用命令行工具(CLI)删除文件这两种方法之间是有区别的。 当我们使用窗口管理器来删除文件时,我们仅仅只是将文件从某个目录移…

Win11注册表编辑器误删了如何恢复?

​ 注册表编辑器是一个用来更改系统注册表设置的高级工具,与资源管理器的界面很类似。近期有用户将注册表编辑器误删了,那么应该如何恢复呢,下面小编就给大家分享一下详细的恢复方法。遇到同样问题的用户注意了。 更多重装系统教程尽在小白…

注册表中exe被删除后恢复

恢复注册表 如果我们不小心将注册表中的exe删除后,这个时候不管打开什么软件都需我们自己进行指定才能打开使用,这样是及其麻烦的,而且在删除掉.exe之后,原来能在“运行”中搜索的执行文件也都无法执行了,比如果原来我…

LINUX使用rm误删文件后恢复

最近使用centos执行了rm -rf删除了一个文件,后面想恢复。 先关闭selinux vim /etc/selinux/config SELINUXdisabled reboot 重启生效1、使用debugfs命令恢复(此命令为系统自带) 1-1、查看文件系统类型,以下2个命令都可查看&…

电脑注册表误删恢复办法:系统文件和设置还原法

一.起因:为了修改电脑字体一不小心把Control Panel整个注册表给删除了,导致电脑界面变的锯齿,界面变形等各种问题,网上找了许多方法都没成功或者难度较大,最终使用系统恢复还原点将系统变成几个小时前的各种设置&#…

如何每天自动发送心灵鸡汤、正能量语录

为什么要发送心灵鸡汤、正能量语录 许多团队管理者或者行政为了需要鼓励团队,让员工有一个积极饱满的工作状态,需要每天在企业群内发送心灵鸡汤、正能量语录等信息,按照大多数人的办法,是在搜索引擎找到对应的心灵鸡汤或者正能量…