内联函数
软件在调用、运行一个函数的时候,计算机系统需要申请内存空间,对函数参数进行压栈,函数调用完之后,数据进行出栈。
所以,频繁调用一个函数的时候,计算机系统需要频繁地申请空间,对数据进行压栈和出栈。耗费很多的系统资源。从而降低程序的执行效率。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函数的长度。因此,只用于规模很小,而且,使用频繁的函数,可大大提高运行速度。
声明:本文部分素材转载自互联网,如有侵权立即删除 。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容