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

2021-08-13 10:30:23 字數 688 閱讀 8882

inline是加在實現上,就算加在宣告上,編譯器也會忽略掉。內聯展開是在編譯時進行的,只有鏈結的時候原始檔之間才有關係。所以內聯要想跨原始檔必須把實現寫在標頭檔案裡。如果乙個

inline

函式會在多個原始檔中被用到,那麼必須把它定義在標頭檔案中。

注意:將函式的定義(

之間的部分)放在標頭檔案中是強制的,除非該函式僅僅被單個 

.cpp 

檔案使用。尤其是,如果你將內聯函式的定義放在 

.cpp 

檔案中並且在其他 

.cpp

檔案中呼叫它,聯結器將給出 「

unresolved external

」 錯誤。

最佳實踐是:僅把

inline

關鍵字放在類外部函式的定義前。

inline函式的特徵是在呼叫的地方插入相應函式的**,所以編譯之後的目標檔案裡是沒有

inline

函式體的,因為在要呼叫的地方它都已經用相應的語句替換掉了(當然這只限於內聯成功的情況)。如果我們將

inline

函式寫在

cpp檔案裡,但是絕大多數情況下,在我們用第三方類庫的時候,我們只有標頭檔案和目標檔案(沒有

cpp檔案),當你呼叫那個內聯函式時,編譯器沒辦法找到它。所以說將

inline

函式寫在

cpp檔案中是沒什麼用的。

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

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

c 模板類 模板函式的宣告與定義應該放在標頭檔案裡

c 模板類 模板函式的宣告與定義應該放在標頭檔案裡,不要分開來寫類中函式的宣告與定義 比如在.h檔案裡宣告某個成員函式,在.cpp檔案裡定義該成員函式 這樣會導致連線錯誤。所應該將模板類 模板函式的定義與宣告寫在乙個.h檔案裡。比如在類的標頭檔案宣告了乙個函式 templatevoid fun t ...

c 模板類 模板函式的宣告與定義應該放在標頭檔案裡

如果函式模板按照普通的函式宣告放在標頭檔案的,定義放在。cpp檔案,會出現錯誤 模板函式宣告 定義 引用有什麼要注意的問題麼?mylib.h template t max v t v1,t v2 mylib.cpp include mylib.h template t max v t v1,t v2...