#include<iostream>
struct A {
A () {
std::cout << "A::A()\n";
}
};
A my_a; // works fine and prints the above line
int main () {}
根据 C++ 标准,驻留在多个文件中的全局对象初始化的顺序是未指定的。
即在 1 个文件中定义的全局对象将按从上到下的顺序调用它们的构造函数。但是,如果有多个这样的文件,那么哪个文件将是第一个到最后一个,是实现定义的还是未指定的。
现在,std::cout
两者my_a
都是全局对象。这意味着上面的代码是一个UB,它是否正确(即初始化惨败)?
可能,编译器可能足够聪明,可以std
在移动到其他对象之前先初始化对象。仍然为了清楚起见,是否有任何完整的证明方法可以为跨多个文件的全局对象执行日志记录?