inline只是对编译器的一个申请,不是强制命令。
优点:
1,比宏的坑少,而且减少函数调用所招致的额外开销。
缺点:
1,有可能使目标代码增加,减少了高速缓存的命中率(如果编译器针对“函数本身”所产出的码可能比针对“函数调用”所产出的码更小。果真如此,将函数inlining确实可能导致较小的目标码和较高的缓存装置命中率)。
2,调试时,比较难跟踪。
3,inline函数更改,其他包含inline函数的模块也应相应重新编译。
可能不inline:
1,函数指针指向inline函数,调用inline函数地址时,编译器必须为此函数生成一个outlined函数本体。
2,虚函数的调用。
3,子类的构造函数和析构函数。
参考:effective C++ 30条