目录
内联函数的概念
以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数的使用可以提升程序的运行效率。

举个例子:
在C++中我们通常定义以下函数来求两个整数的最大值:
代码如下:
int max(int a, int b)
{
return a > b ? a : b;
}
为这么一个小的操作定义一个函数的好处有:
- 阅读和理解函数 max 的调用,要比读一条等价的条件表达式并解释它的含义要容易得多
- 如果需要做任何修改,修改函数要比找出并修改每一处等价表达式容易得多
- 使用函数可以确保统一的行为,每个测试都保证以相同的方式实现
- 函数可以重用,不必为其他应用程序重写代码
虽然有这么多好处,但是写成函数有一个潜在的缺点:调用函数比求解等价表达式要慢得多。在大多数的机器上,调用函数都要做很多工作:
- 程序需要存储当前地址,以便调用结束后返回继续执行
- 程序将传入函数的参数压栈
- 程序跳到跳到标记函数起点的内存单元,执行函数代码
- 函数调用结束后,将栈清空,返回到之前存储的地址继续执行
C++中支持内联函数,其目的是为了提高函数的执行效率,用关键字 inline 放在函数定义(注意是定义而非声明)的前面即可将函数指定为内联函数,内联函数通常就是将它在程序中的每个调用点上“内联地”展开,相当于直接copy一份函数体内代码,在执行到的时候直接按照代码顺序执行,省去了许多函数调用过程,节省了时间。
假设我们将 max 定义为内联函数:
代码如下:
inline int max(int a, int b)
{
return a > b ? a : b;
}
则调用: cout<<max(a, b)<<endl;
在编译时展开为: cout<<(a > b ? a : b)<<endl;
从而消除了把 max写成函数的额外执行开销
是不是觉得这和宏有些像?那为什么不直接用宏?还要整个内联函数
内联函数和宏
首先,宏能够表达的意思有限,通常是一行的表达式。其次,用宏的安全性不高,容易出错。
假设定义宏如下:
#define MAX(a,b) a>b?:a:b
那么语句
res = MAX(i,j)+2;
会被预处理器扩展为
res = i > j? i:j+2;
由于+的优先级高于?,因此最终比较结果与我们期望不符。
那如果把宏修改为
#define MAX(a,b) (i > j? i:j)
仍然存在问题,例如
res = MAX(i++,j)
res = (i++ < j? i++:j); // i被+了两次
同时,宏无法调试,但内联函数可以。在程序的调试版本,内联函数并没有真正内联,就像普通函数一样实现调试,在程序的发行版本,编译器才会实现真正内联。
无论是《Effective C++》中的 “Prefer consts,enums,and inlines to #defines” 条款,还是《高质量程序设计指南——C++/C语言》中的“用函数内联取代宏”,宏在C++中基本是被废了。
内联函数的特性
1、inline是一种以空间换时间的做法,省了去调用函数的额外开销。由于内联函数会在调用的位置展开,所以代码很长或者有递归的函数不适宜作为内联函数。频繁调用的小函数建议定义成内联函数。
2、inline对于编译器而言只是一个建议,编译器会自动优化,如果定义为inline的函数体内有递归等,编译器优化时会忽略掉内联。
3、inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了链接就会找不到。
4、关键字 inline 必须与函数定义体放在一起才能使函数成为内联,仅将 inline 放在函数声明前面不起任何作用。
5 .相比于宏,有类型检查,安全性更高,具有一般函数特性,可调试。
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!
相关推荐:
SEO教你如何快速提升网站排名,打破竞争壁垒!,本溪seo优化排名公司
SEO售产-数字营销新战场,助力企业实现盈利增长,去哪找自贡网站建设
ChatGPT暂时不可用?如何高效应对并寻找最佳替代方案!,logo ai教程视频
自动生成文章的AI软件,助力内容创作的未来
zblog站群,zblog怎么样 ,欧卡2ai汽车如何使用
SEO全站优化:打造强大网站排名的必备利器,AI论文写作的优点
seo站内链接有什么作用,seo中网站内链的作用 ,781900ai
ChatGPT免费版每天提问有次数限制吗?揭秘如何高效使用AI助手!,机甲ai手绘
SEO学堂:开启数字营销新时代,全面提升网站排名与流量,文山ai营销推广方案
优化标题:如何让你的文章更具吸引力与点击力,整站网站优化解决方案
SEO赚钱:如何通过SEO技能在网络上实现财富自由,网站怎么建设推广平台
SEO就是:让你的品牌脱颖而出,获得更多曝光与流量,梅岭关键词排名优化
为什么做seo矩阵项目,为什么做seo矩阵项目不能做 ,怎么用ai写作
SEO定价策略:如何根据企业需求定制最佳价格方案,教育培训抖音营销推广
如何选择适合你的AI工具?全面解析AI工具哪个好用
ChatGPT出问题?背后的原因与解决方案,夸克ai写作生成
为什么做酒店seo,为什么做酒店 ,ai uehara下载
什么是seo在线咨询,什么是seo在线咨询服务 ,unreal ai
优化分析:提升企业效益的关键策略,山东大网站建设
SEO外链建设:提升网站排名的关键策略,ai偏执
SEO在广告领域的深度解析:如何利用SEO提升广告效果,网文写作ai工具
互联网快照:记录数字时代的每个瞬间,全网seo怎么优化内容
SEO关键词推广软件官网-助力企业实现高效精准的网络营销,圈圈ai
ChatGPT无法加载?检查您的网络设置并尝试重启ChatGPT,助您畅享无障碍智能对话体验,ai记录人
AI的两个主要发展阶段:从起步到突破,如何重塑未来,wps ai写作去哪里
ChatGPT3.5需要登录使用吗?AI使用的真相!,电脑版写作ai推荐怎么关闭
二级泛站群,zblog二级泛站群 ,李宗盛ai
SEO包月服务:助力企业提升网站排名与流量的长期利器,网站建设流程 报读文库
SEO地位:如何提升你的网站排名与曝光度,抢占市场先机,微营销网络推广
为什么做抖音seo,为什么做抖音推广 ,描边ai虚线
SEO快速优化文章排名:提升网站流量的必备技巧,ai小苹果会员分享
什么是seo行业,seo是什么职业做什么的 ,ai标题字体效果
ChatGPT:打破语言障碍,理解与沟通的新时代,交通轨道ai
撰写稿子的AI,写作的“超级助手”来了!
Chatttst:开启智能沟通新时代的无限可能,上海联通ai
seo类文章是什么,seo技术文章 ,ai3.5-ai聊天
AI免费生成:开启智能创作新纪元,助力你的创意无限可能
AI代写文章:高效创作的新风尚
seo要学什么语言,做seo需要什么语言 ,ai martino
AI上的文章属于原创吗?人工智能创作内容的归属问题
seo网站反链是什么,网站反链怎么做 ,ai插画头像卡通
从“官网扒下来”看企业数字化转型的未来,摄影营销策略推广文案
SEO希望:如何通过SEO优化实现网站突破,迈向成功之路,品牌网站推广软件
什么是SEO优化方案,seo的优化方案 ,ai emorobot
SEO行销:开启网站流量增长的秘密武器,百威产品关键词查询排名
AI优化文章:如何利用人工智能提升写作效率和质量
ChatGPT不能用了?了解这一背后的真相及解决方法,ai恐怖头像
互联网资源的无限潜力:如何利用数字世界为个人和企业创造价值,信阳网站建设正规公司
线上AI写作免费一键生成,轻松提升写作效率,解放创作思维
seo能解决什么问题,seo会遇到哪些问题 ,挚爱花嫁ai