▶ 感谢大佬的总结【http://www.cnblogs.com/xuemaxiongfeng/articles/2464850.html】
● 存储限定符 __inline 与关键字 inline 的语义完全相同,不影响函数的类型,建议编译器在合理的情况下内联编译 C/C++ 函数
●
内联减少了函数调用的开销,但却增加了代码量
●
inline 仅用于 C++,__inline和 __forceinline 用于 C/C++
●
编译器处理内联的情况:
■ 使用 /clr 编译选项时,如果函数使用了安全属性,则不会进行内联
■ 类定义的同时定义其成员函数,则默认内联,否则也可使用 inline 指定内联
■ 使用__forceinline关键字,但内敛失败,则给出 level 1 警告
●
__forceinline 强制内联,不基于编译器的性能和优化分析而依赖于程序员的判断,仍不能内联的情况:
■ 函数或其调用者使用 /Ob0 编译器选项(Debug模式默认选项)
■ 函数和其调用者使用不同类型的异常处理。
■ 函数具有可变数目的参数
■ 函数使用了在线汇编(__asm{...}),但若开启编译选项 /Og,/Ox,/O1,/O2 则仍能内联
■ 是虚函数并且是虚调用,但虚函数的直接调用可以内联
■ 使用函数指针来对该函数进行调用
■ 函数被关键字 __declspec(naked) 修饰