關於inline函式和非inline函式
阿新 • • 發佈:2018-12-17
今天在學習C++時看到了“在多個檔案中使用類”這一小節,對於其中的內容不是十分理解,因此在此記錄,並提出自己的一些看法。
如果有多個檔案都需要 用到同一個類,那麼就可以把這個類寫在一個頭檔案中,但是類的非內聯成員函式的函式體只能出現在一個.cpp檔案中,不能放在標頭檔案中被多個.cpp檔案包含,否則連結時會發生重複定義的錯誤。類的內聯成員函式的函式體最好寫在標頭檔案中,這樣編譯器在處理行內函數的呼叫語句時,就能在本檔案中找到行內函數的程式碼,並將這些程式碼插入呼叫語句處。內聯成員函式放在標頭檔案中被多個.cpp檔案包含,不會導致重複定義的錯誤。——《新標準C++》 郭煒著
上網查閱了下,發現有很多人都說行內函數需要宣告定義在一起,並且都放在標頭檔案中。對於行內函數,我也在書上看到過,需要在呼叫點前面完整定義,即出現宣告和函式體,但是需不需要再一起到時沒有說,網上也看到了一個例子。只需要在函式宣告前加上extern即可實現宣告和函式體分離了。
對於行內函數的這一特性,我的理解是這樣的:行內函數需要在每一個檔案中都有一個定義,因此在標頭檔案中是沒問題的,不會出現重複定義的問題;而對於非行內函數,則只需要定義過一次就可以了,在標頭檔案中的話,每個檔案都進行一次定義,結果出現了重複定義的錯誤。
但是我無法確認理解的正確性,甚至相當懷疑,並且該理解也停留於表面,之後有了深入的理解再來補充吧。