C++中具有相同名称但成员不同的结构

struct with same name but different member in C++

根据 The C++ Programming Language (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 表示:

if one .cpp file defines struct S { int x; }; and the other .cpp file defines struct S { int y; };, the behavior of the program that links them together is undefined.

因此,您的程序调用了未定义行为 (UB)。因此,不需要编译器对此进行诊断。

如果您想知道其背后的原因,请阅读

希望对您有所帮助。 :)