C++內聯函數
Inline函數,看起來像函數,動作像函數,沒有宏的副作用,可以調用它們又沒有函數調用的額外開銷。多好的內聯函數
實際上,獲得的比想象的還要多,避免函數調用的額外開銷只是它好處的一部分而已。編譯器還可以通過最優化機制(被設計用來濃縮那些‘不含函數調用的代碼‘的代碼),所以當inline某個函數,編譯器可能就有能力對它執行語境相關最優化。
但是函數調用會增加目標代碼的大小,然而,如果inline函數的本體很小,編譯器針對‘函數本體‘產出的代碼可能比‘函數調用’產生的目標代碼更小。
總結:
內聯函數優點:
1 沒有宏的副作用
2 沒有函數調用的額外開銷
3 編譯器可通過最優化機制優化代碼
缺點:
可能是目標代碼增大,所以,使用時,函數本體一定要足夠小
使用注意:
1 inline聲明函數爲內聯函數只是對編譯器的一個申請,不是強制的
2 將函數定義在class定義式內默認是內聯的
3 析構函數和構造函數往往是inline糟糕的候選人(想想析構構造都做了什麼)
4 inline函數是否內聯還取決於它的調用方式
如: inline void fuc(){}
typedef void (*PF)();
PF pf = fuc;
fuc(); //內聯的,正常調用
pf(); //不一定內聯,通過函數指針調用