CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛

C++内联函数,有什么作用?怎么样定义?linuxC++第12讲-源码交易平台丞旭猿

内联函数

软件在调用、运行一个函数的时候,计算机系统需要申请内存空间,对函数参数进行压栈,函数调用完之后,数据进行出栈。

所以,频繁调用一个函数的时候,计算机系统需要频繁地申请空间,对数据进行压栈和出栈。耗费很多的系统资源。从而降低程序的执行效率。C++提供一种提高效率的方法,即在编译的时候将所调用函数的代码嵌入到主函数中。

所以,增加了代码量,但是,减少了函数调用时压栈弹栈等时间资源开销,所以,是一个空间换时间的问题。所以,空间开销增加,时间开销减少。

这种嵌入到主函数中的函数称为 内联函数(inline function),又称为 内嵌函数。

定义内联函数的方法很简单,只须在函数的首行的左端增加一个关键字 inline 即可。如下是一个程序测试例子:

由于在定义函数时指定它为内联函数,因此,编译系统在遇到函数调用 max(i, j, k) 时,就用 max 函数体的代码代替 max(i, j, k),同时,将实参代替形参。这样,m = max(i, j, k) 就被置换成:

{

a = i; b = j; c = k;

if(b > a) a = b;

if(c > a) a = c;

m = a;

}

内联函数与用 define 命令实现的带参宏定义有些相似,但不完全相同。宏定义是在编译前由预处理程序对其预处理的,它只作简单的字符置换而不作语法检查,往往会出现意想不到的错误。

如下的例子,是用带参数宏定义实现求平方值。

输出的结果是:

9 — 执行 power(3) = 3 * 3 = 9

3 — 执行 power(1 + 1) = 1 + 1* 1 + 1 = 1 + 1 + 1 = 3

其实,在使用 define 定义 power 宏的时候,应该加上相应的括号来限制,应该

definepower(x) (x*x)

这样 power(5 + 5) = (5 + 5) * (5 + 5) = 10 * 10 = 100

如果不用 define ,而用内联函数,则可以避免上面的副作用:

可以看到:用带参宏定义和内联函数都可以实现代码的置换,但具体的做法不同,用内联函数可以达到用 define 宏置换的目的,但不会出现带参宏定义的副作用。

显然,内联函数优于带参宏定义。自从有了内联函数之后,一般不再用 define 带参宏定义了。

使用内联函数可以节省运行时间,但却增加了目标程序的长度。假设要调用10次 power 函数,则在编译时先后 10 次将 power的代码复制并插入到main()函数中,大大增加了main函数的长度。因此,只用于规模很小,而且,使用频繁的函数,可大大提高运行速度。

声明:本文部分素材转载自互联网,如有侵权立即删除 。

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容