Inline Function
我们经常写一些函数在宏中,
#define MAX(a,b) (a)>(b)?0:1
通过预处理器直接将宏代码代替掉宏调用,从而略过压栈,返回,jr等一系列的函数开销。
但是,使用宏会有一些缺陷 1.宏实际上并不会按照函数规则进行检查,2.使用宏不允许访问类内的成员数据,因此 C++引入了内联函数解决这一问题。
内联函数既保持了宏的效率又增加了语法检查,也可以访问类内成员数据。
编译器在处理内联函数时类似宏,在调用处进行展开,因此省去了函数开销,保证了效率。但与此同时也就出现了代码长度和处理函数开销的balance。
[!TIP|style:flat|label:some Tips]
inline 的函数体一定要放在头文件中
inline function不会在任何obj文件中生成代码
在类内部直接定义的函数都会自动成为内联函数,在类外也可以通过inline关键词成为内联函数
扩
编译器在遇到内联函数会做什么事情?
首先会在符号表中放入函数类型,当对函数体进行分析,没有错误时,将函数体放入符号表。
当调用内联函数时,编译器首先会保证这个调用是正确的,没有问题就会用内联函数代码直接替换函数调用。
当函数太复杂时,编译器会放弃内联方式!