我正在阅读 Scott Meyer 的 Effective C++ 的第 4 项,他试图展示一个在不同翻译单元中使用静态非本地对象的示例。他强调了一个问题,即在一个翻译单元中使用的对象在使用之前不知道它是否已在另一个翻译单元中初始化。如果有人有副本,它在第三版的第 30 页。
这个例子是这样的:
一个文件代表一个库:
class FileSystem{
public:
std::size_t numDisks() const;
....
};
extern FileSystem tfs;
并在客户端文件中:
class Directory {
public:
Directory(some_params);
....
};
Directory::Directory(some_params)
{
...
std::size_t disks = tfs.numDisks();
...
}
因此,我的两个问题是:
1)如果客户端代码需要使用tfs
,那么会有某种包含语句。因此,该代码肯定都在一个翻译单元中吗?我看不出您如何引用不同翻译单元中的代码?程序肯定是一个翻译单元吗?
2)如果客户端代码包含 FileSystem.h,该行extern FileSystem tfs;
是否足以让客户端代码调用 tfs(我很欣赏初始化可能存在运行时问题,我只是在谈论编译时范围)?
编辑到第一季度
书中说这两段代码位于不同的翻译单元中。tfs
知道它们在不同的翻译单元中,客户端代码如何使用变量?