8
由於每本書的C++編程語言(Bjarne的Stroustrup的),在第15.2.3(的一個定義規則)頁面沒有425,我寫如下程序:結構與名稱相同,但不同的成員在C++
file1.cpp
struct S2 { int a; char b; };
file2.cpp
struct S2 { int a; char bb; };
int main(){ return 0;}
要編譯我試圖以下命令。
g++ -std=c++11 file1.cpp file2.cpp
和
clang++ -std=c++11 file1.cpp file2.cpp
這兩種指令生成可執行與任何錯誤或警告。但是按照書中的這個例子,應該給出錯誤。
我不確定這是否違反*一個定義規則*(ODR)或不。但是,如果是這樣,編譯器不會被要求提供錯誤 - 這只是意味着程序員犯了一個錯誤。 –
@MartinBonner:是的,這顯然違反了ODR。你是對的。編譯器無需提供錯誤 – Destructor
請不要插入到商業網站的鏈接。 –