Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c++;非局部静态对象在不同转换单元中交互的示例 我正在读Scott Meyer的有效C++书。在书中,他提到不同翻译单位中非局部静态对象的相对顺序是未定义的。为了证明这一点,他举了以下例子。在一个文件中 class FileSystem { public: std::size_t numDisks() const; }; extern FileSystem tfs;_C++_Static_Initialization - Fatal编程技术网

c++;非局部静态对象在不同转换单元中交互的示例 我正在读Scott Meyer的有效C++书。在书中,他提到不同翻译单位中非局部静态对象的相对顺序是未定义的。为了证明这一点,他举了以下例子。在一个文件中 class FileSystem { public: std::size_t numDisks() const; }; extern FileSystem tfs;

c++;非局部静态对象在不同转换单元中交互的示例 我正在读Scott Meyer的有效C++书。在书中,他提到不同翻译单位中非局部静态对象的相对顺序是未定义的。为了证明这一点,他举了以下例子。在一个文件中 class FileSystem { public: std::size_t numDisks() const; }; extern FileSystem tfs;,c++,static,initialization,C++,Static,Initialization,在另一个文件中 class Directory { public: Director() { std::size_t disks = tfs.numDisks(); } }; Directory tempDir(); 我理解,如果初始化顺序不确定,这可能是不好的,因为tfs可能在tempDir调用其构造函数之前无法初始化 但是,我不明白为什么初始化顺序是不确定的;特别是,为什么有两个翻译单位。对于要在第二个文件中使用的tfs,是否必须包括第一个文件,从而将两个文件放在同一个

在另一个文件中

class Directory {
  public:
  Director() {
    std::size_t disks = tfs.numDisks();
  }
};
Directory tempDir();
我理解,如果初始化顺序不确定,这可能是不好的,因为
tfs
可能在
tempDir
调用其构造函数之前无法初始化

但是,我不明白为什么初始化顺序是不确定的;特别是,为什么有两个翻译单位。对于要在第二个文件中使用的
tfs
,是否必须包括第一个文件,从而将两个文件放在同一个翻译单元中


所以我的问题是:我刚才说的有什么问题,或者在不同的翻译单元中交互的静态非本地对象的另一个例子是什么,这可能会由于初始化顺序而导致问题?

注意,在第一个文件中,只有
tfs
的声明,而不是它的定义(它使用
extern
关键字)

这意味着
tfs
在不同的翻译单元中定义,因此未指定初始化顺序