C++內聯函數總結

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();        //不一定內聯,通過函數指針調用

                     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章