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

2021-09-06 08:52:14 字數 698 閱讀 9066

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

inline

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

注意:將函式的定義(

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

.cpp

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

.cpp

檔案中並且在其他

.cpp

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

unresolved external

」 錯誤。

最佳實踐是:僅把

inline

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

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

inline

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

inline

函式寫在

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

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

inline

函式寫在

cpp檔案中是沒什麼用的。

原文

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

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

函式模板和類模板成員函式的定義通常放在標頭檔案中

今天寫程式時,將函式模板的宣告和定義分開放在標頭檔案和.cpp檔案中,發生了連線錯誤。上網檢視資料和檢視 c primer 5 p582發現,函式模板和類模板成員函式的定義通常放在標頭檔案中,除非使用export關鍵字實現分離。下面是 c primer 5 的原文 p582 關鍵概念 模板和標頭檔案...

函式模板和類模板成員函式的定義通常放在標頭檔案中

今天寫程式時,將函式模板的宣告和定義分開放在標頭檔案和.cpp檔案中,發生了連線錯誤。上網檢視資料和檢視 c primer 5 p582發現,函式模板和類模板成員函式的定義通常放在標頭檔案中,除非使用export關鍵字實現分離。下面是 c primer 5 的原文 p582 關鍵概念 模板和標頭檔案...