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关键词成为内联函数

编译器在遇到内联函数会做什么事情?

首先会在符号表中放入函数类型,当对函数体进行分析,没有错误时,将函数体放入符号表。

当调用内联函数时,编译器首先会保证这个调用是正确的,没有问题就会用内联函数代码直接替换函数调用。

当函数太复杂时,编译器会放弃内联方式!

Copyright all right reserved,powered by Gitbook该文件修订时间: 2020-08-30 19:30:48

results matching ""

    No results matching ""