inline函式定義在標頭檔案中

2021-09-11 01:38:34 字數 372 閱讀 1000

寫這個內聯函式的時候也沒細想,結果違反了inline函式的要求。

所謂內聯函式,就是編譯器將函式定義(之間的內容)在函式呼叫處展開,藉此來免去函式呼叫的開銷。

如果這個函式定義在標頭檔案中,所有include該標頭檔案的編譯單元都可以正確找到函式定義。

然而,如果內聯函式fun()定義在某個編譯單元a中,那麼其他編譯單元中呼叫fun()的地方將無法解析該符號,因為在編譯單元a生成目標檔案a.obj後,內聯函式fun()已經被替換掉,a.obj中不再有fun這個符號,鏈結器自然無法解析。

所以,如果乙個inline函式會在多個原始檔中被用到,那麼必須把它定義在標頭檔案中。在c++中,這意味著如果inline函式具有public或者protected訪問屬性,你就應該這麼做。

inline函式的定義放在標頭檔案中

inline是加在實現上,就算加在宣告上,編譯器也會忽略掉。內聯展開是在編譯時進行的,只有鏈結的時候原始檔之間才有關係。所以內聯要想跨原始檔必須把實現寫在標頭檔案裡。如果乙個 inline 函式會在多個原始檔中被用到,那麼必須把它定義在標頭檔案中。注意 將函式的定義 之間的部分 放在標頭檔案中是強制...

inline函式必須在標頭檔案中定義嗎?

前不久在寫 的時候遇到乙個link錯誤,的原型如下所示,基本就是定義了乙個基類和派生類,在派生類的乙個成員函式中用到了基類定義的乙個內聯函式。base.h class base base.cpp include base.h inline void base fun derived.h includ...

inline函式必須在標頭檔案中定義嗎?

前不久在寫 的時候遇到乙個link錯誤,的原型如下所示,基本就是定義了乙個基類和派生類,在派生類的乙個成員函式中用到了基類定義的乙個內聯函式。cpp view plain copy print?base.h class base base.cpp include base.h inline void...