【发布时间】:2014-03-14 16:47:47
【问题描述】:
C++98 语言标准规定: (我的重点)
3.6.2 非本地对象的初始化
1 英镑 [...] 零初始化 和用常量表达式初始化是统称为 称为静态初始化;所有其他初始化都是动态初始化。 [...]
3 英镑 [...] 它是实现定义的 命名空间范围对象的动态初始化(8.5、9.4、12.1、12.6.1)是否在main的第一条语句之前完成。如果初始化延迟到 main 的第一个语句之后的某个时间点,它应该发生在与要初始化的对象在同一翻译单元中定义的任何函数或对象的第一次使用之前。 [...]
在我的办公室里,我们对粗体段落有两种解释......
我的问题是:有一个类有一大堆静态方法和动态初始化的静态数据成员。在动态初始化完成之前,从另一个翻译单元调用此类中的静态方法是否会(或不能)发生?
谢谢!
[编辑:]
也许这可以归结为“它会发生”的解读为:
- 应该已经开始了
- 应已完成
【问题讨论】:
-
这两种解释是什么?我真的只能看到一种可能的解释。知道另一个是什么会很有帮助。
-
1:可能发生。 2:不可能发生。
-
有些同事读这篇文章的方式就像“在课堂上使用”或“在外面使用”。
-
但它说使用。不在中使用或从中使用。它涉及任何时候使用此 TU 中的函数或类,无论如何、何时以及由谁使用。跨度>
标签: c++