按照C++编程语言(Bjarne Stroustrup)的书,在15.2.3节(一个定义规则)第425页中,我编写如下程序:
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
这两个命令都生成可执行文件,而没有任何错误或警告。但是按照本书,这个例子应该会出错。
最佳答案
One Definition Rule说:
因此,您的程序将调用未定义的行为(UB)。因此,不需要编译器对此进行诊断。
如果您想知道其背后的原因,请阅读this。
希望能帮助到你。 :)