天天看點

C++ inline函數和template函數

由于inline函數和template函數之間有些相同的特點,是以在學習C++的時候經常弄混inline函數和template函數的一些特點,讀過Effective C++後對兩者的概念有了較清楚的了解,在此記下來,友善以後查閱:

相同點:inline函數和template函數通常都被定義于頭檔案内。 原因:Inline函數通常一定被内置于頭檔案内,因為大多數建置環境(build environments)在編譯過程中進行inlining(内聯展開),而為了将一個“函數調用”替換為“被調用函數的本體”,編譯器必須知道那個函數長什麼樣子。 Template通常也被置于頭檔案内,因為它一旦被調用,編譯器為了将它具現化,需要知道它長什麼樣。

不同點:Template的具現化與inlining無關。 原因:如果你正在寫一個template而你認為所有根據此template具現出來的函數都應該inlined,請将此template聲明為inline;但如果你寫的template沒有理由要求它所具現的每一個函數都是inlined,就應該避免将這個template聲明為inline(不論顯示或隐式),因為inlining需要成本,比如引發代碼膨脹等。

繼續閱讀