结构与名称相同,但不同的成员在C++
问题描述:
由于每本书的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
这两种指令生成可执行与任何错误或警告。但是按照书中的这个例子,应该给出错误。
答
如果一个.cpp文件定义
struct S { int x; };
和其他的.cpp 文件定义struct S { int y; };
,即 联系在一起是不确定程序的行为。
因此,您的程序会调用未定义的行为(UB)。因此,编译器不需要为此进行诊断。
如果你想知道背后的原因,然后阅读this。
希望它有帮助。 :)
我不确定这是否违反*一个定义规则*(ODR)或不。但是,如果是这样,编译器不会被要求提供错误 - 这只是意味着程序员犯了一个错误。 –
@MartinBonner:是的,这显然违反了ODR。你是对的。编译器无需提供错误 – Destructor
请不要插入到商业网站的链接。 –