考虑以下源文件 1.cpp
#include <iostream>
using namespace std;
struct X
{
X()
{
cout << "1" << endl;
}
};
void bar();
void foo()
{
X x;
}
int main()
{
foo();
bar();
return 0;
}
2.cpp
#include <cstdio>
struct X
{
X()
{
printf("2\n");
}
};
void bar()
{
X x;
}
从这些文件编译的程序是否格式正确?它的输出应该是什么?
由于违反单一定义规则或输出“1 2”,我预计链接器会出错。但是,当使用 g++ 3.4 和 VC 8.0 编译时,它会打印出“1 1”。
这怎么解释?