例:爲什麼編譯器不能自動內聯自由定義的函數?相反,導致鏈接錯誤
// header.h
void foo() // function definition in the file
{
}
// file1.cpp
#include"header.h"
...
// file2.cpp
#include"header.h"
...
上面的代碼將導致連接錯誤。假設如果編譯器自動生成inline foo()
那麼就不會有鏈接器錯誤。
我的問題是從語言的角度來看。爲什麼編譯器不會自動創建它inline
?它會有所作爲嗎?
問題換句話說:「如果編譯器在每個定義的自由函數前面假定爲inline
,可能會發生什麼?」
如何在每個免費函數前假設關鍵字「inline」的編譯器? – iammilind
@iammilind然後,當你偶然有兩個(不同的)具有相同名字的函數時,你會得到不一致/不正確的行爲(而不是錯誤)。只是不要將定義放入標題(無論如何都是組織的良好做法)並添加包含警衛(每個標題爲三行)。 – delnan