|
|
1
21
当谈到非局部静态对象时,没有太多的保证。正如您已经知道的(这里也提到过),它不应该编写依赖于此的代码。静态初始化命令失败。。。 静态对象经过两个阶段的初始化:静态初始化和动态初始化。前者首先发生并执行零初始化或常量表达式初始化。后者发生在所有静态初始化完成之后。例如,这就是调用构造函数的时候。 通常,此初始化发生在main()之前的某个时间。然而,与许多人所想的相反,即使是C++标准也不能保证。实际上可以保证的是,初始化是在使用与被初始化对象在同一翻译单元中定义的任何函数或对象之前完成的。请注意,这不是特定于操作系统的。这是C++规则。这里引用了《标准》中的一段话: 它是实现定义的对象的动态初始化(8.5、9.4、12.1、12.6.1)与否 命名空间范围在main的第一条语句之前完成。如果初始化延迟到某个时间点 在与要初始化的对象相同的转换单元中 |
|
|
2
12
这主要取决于编译器和运行时。对构建全局对象的时间进行任何假设都不是一个好主意。 如果有一个静态对象依赖于另一个已经构建的对象,那么这尤其是一个问题。 这被称为“ static initialization order fiasco “。即使代码中不是这样,关于该主题的C++Lite常见问题解答文章也值得一读。 |
|
|
3
11
您已经给出了答案,初始化是在
对于第二部分,在gcc中,可以使用
|
|
4
7
您拥有的受让人:
如果有相互依赖的全局变量,则有两个选项:
示例1:全局A的构造函数使用全局日志
示例全局B的析构函数使用全局日志在这里,您必须授权在对象B之前不销毁对象日志。这意味着必须在对象B之前完全构造日志(因为销毁规则的相反顺序将适用)。同样,也可以使用相同的技术。要么将它们放在同一个翻译单元中,要么使用函数获取日志。
|
|
|
5
5
|
|
KiraHoneybee · 具有构造函数参数的模板化类 4 年前 |
|
|
nick2225 · 隐式调用复制构造函数? 4 年前 |
|
|
nohaga · 为什么在本例中p3需要默认构造函数? 4 年前 |
|
|
Aadil Hoda · 为什么类类型的成员需要初始化? 4 年前 |
|
|
EloiGG · 具有任意类型的变量的可数的C++函数 4 年前 |