1.inline函数,比宏好得多。调用inline函数不需要蒙受函数调用所招致的额外开销;
2.编译器或许会优化inline函数本体。编译器最优化机制通常被设计用来浓缩那些“不含函数调用”的代码,当你inline某个函数时,或许编译器就因此有能力对它(函数本体)执行语境相关最优化;
3.inline函数的原理是,将”对此函数的每一个调用“都以函数本体替换之。自然,这样可能增大目标文件的大小。
4.可执行文件变大,内存换页行为增大,指令高速缓存装置的击中率降低,从而影响运行效率。如果inline函数本体很小,编译器针对”函数本体“所产出的码可能小于”函数调用“所产出的码,这样综合之后,目标文件大小基本不变甚至更小,相应的指令击中率也可能达到最优。所以,一般可以对简单的函数inlining,不对太过复杂的函数inlining;
5.inline函数只是对编译器的申请,不是强制命令。
6.inline函数通常被置于头文件中。因为大多建置环境(build environments)在编译过程中进行inlining,而为了将一个”函数调用“替换为”被调用函数的本体“,编译器必须知道那个函数长什么样,inlining在大多数C++程序中是编译期行为;
7.有时候编译器有意愿inlining某个函数,还是可能为该函数生成一个函数本体。例如,如果程序要取某个inline函数的地址,编译器通常必须为此函数生成outlined函数本体;
8.inline函数无法随着程序库的升级而升级。也就是说,即使程序库(有inline函数)升级了,但用到inline函数的客户端都必须将它重新编进程序中。如果程序库是非inline函数,客户端只需重新链接就好了,在此基础上,如果客户端是动态链接程序库,客户端将在不知不觉中使用升级的程序库;
9.大部分调试器对inline函数束手无策。建议一开始先不要将任何函数声明为inline。