
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
5.4 内联函数
内联函数就是将函数内嵌到主函数中,这样会加快函数的运行速度,从而提高代码运行效率。内联函数也属于一种函数,只是其在内存中的处理机制不同。普通函数属于外部调用,而内联函数会将函数的代码内联到主函数中进行执行。C++语言使用内联函数替代C语言中的宏定义。
5.4.1 内联函数的定义
定义内联函数的语法与定义普通函数的语法类似,只是在定义函数前增加关键字inline,其语法形式如下。

注意:如果定义时指定有返回类型也需要加return语句。
inline是C++关键字,在函数声明或定义中函数返回类型前加上关键字inline,即可把函数指定为内联函数。
内联函数的执行原理与普通函数不同。内联函数可以解决频繁调用的函数大量消耗栈空间(栈内存)的问题。
内联函数在调用时,会在内存中将函数中所有的代码复制到主函数中,然后主函数依次按照顺序执行即可。而普通函数在调用时,首先需要地址跳转,然后复制数据,再执行数据,执行完后再次地址跳转到主函数。如果频繁调用函数,这种地址跳转会造成大量的运算负担。
简单来讲,普通函数的调用就像使用外接U盘传输数据,每次调用时都需要插上U盘,复制数据,不用时,再拔掉U盘。而内联函数的调用就像使用硬盘传输数据,想用时就直接复制数据,不需要频繁地插拔。
5.4.2 内联函数的使用
关键字inline必须与函数定义放在一起才能使函数成为内联函数,仅仅将inline放在函数声明前面是不起任何作用的。
【示例5-7】下面定义并使用内联函数。

程序运行结果如下。

注意:在处理的数据规模较小,并且硬件资源足够的情况下,我们很难发现内联函数的运算优势。