我正在阅读 Scott Meyer 的 Effective C++ 一书。在其中,他提到非本地静态对象在不同翻译单元中的相对顺序是未定义的。为了演示,他举了下面的例子。在一个文件中,
class FileSystem {
public:
std::size_t numDisks() const;
};
extern FileSystem tfs;
在另一个文件中,
class Directory {
public:
Director() {
std::size_t disks = tfs.numDisks();
}
};
Directory tempDir();
我理解为什么如果初始化顺序不确定,这可能会很糟糕,因为在调用其构造tfs
函数之前可能不会初始化。tempDir
但是,我不明白为什么初始化顺序是不确定的;特别是为什么有两个翻译单元。要tfs
在第二个文件中使用,是否必须包含第一个文件,因此将两个文件放在同一个翻译单元中?
所以我的问题是:我刚才所说的有什么问题,或者静态非本地对象在不同翻译单元中交互的另一个例子是什么,这可能由于初始化顺序而导致问题?