我读了this我想不出在文件 X.cpp
中初始化之前使用 X::_x
的场景(假设编译器对待 X.h
和X.cpp
一个接一个)
有人可以向我解释一下这种情况是如何发生的吗?
最佳答案
当您有多个使用静态初始化的翻译单元*,并且其中一个初始化例程需要另一个例程生成的数据时,静态初始化顺序就会失败。
如果您只有一个 header 和一个翻译单元,则静态初始化顺序失败不适用,因为 initialization order within the same unit is well defined (它遵循声明的顺序)。
* 这是 cpp 文件的奇特名称。
关于C++静态初始化顺序惨败发生在什么时候?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38148438/