▶ 感謝大佬的總結【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) 修飾