为了解决一些频繁调用小的函数消耗空间(栈内存)问题,从而引入inline内联函数。内联函数最终使执行程序体积增加,换取时间,或增加空间消耗来节省时间。
一、短⼩函数使用inline有什么优缺点
优点:
- 在内联函数被调用的地方进行代码展开,省去函数调用的时间,提供程序运行效率。
- 相比与宏函数,内联函数在代码展开时,编译器会进行语法安全检查或数据类型转换,使用更安全。
缺点:
- 代码膨胀,产生更多开销。
- 修改内联函数,调用该函数的代码文件需重新编译。
二、内联函数和普通函数区别
- 编译器调用内联函数时,不会将编译成函数的调用指令而是直接将函数体的代码插入调用语句。
- 像函数一样重复的使用一段代码,减小开销。
三、内联函数和宏定义
-
宏在预编译时进行,只做简单字符串替换;而内联函数在预编译时直接将代码嵌入到目标代码中,省去函数调用的开销来提供效率,且进行参数类型检查,具有返回值,可以实现重载。
-
宏不是函数,内联函数是函数。
-
宏定义时要小心处理宏函数,一般用括号括起来,否则容易产生二义性。而内联函数不会产生。
使用限制
inline只适合涵数体内代码简单的涵数使用,不能包含复杂的结构控制语句例如while、switch,并且不能内联函数本身不能是直接递归函数(即,自己内部还调用自己的函数)。