在阅读编程:使用C ++的原理和实践,第2版一书时,我发表了以下声明:
...如果你真的需要一个全局变量(或常数),你会怎么做 使用复杂的初始化程序?一个似是而非的例子就是我们 想要一个我们为库提供的Date类型的默认值 支持商业交易:
const Date default_date(1970,1,1); // the default date is January 1, 1970
我们怎么知道default_date之前从未使用过 初始化?基本上,我们无法知道,所以我们不应该写那个 定义...
让我对这行代码感到好奇的是在定义之前使用全局变量的隐含思想。作者(Bjarne Stroupstrup)在初始化之前使用全局变量的确是什么意思?当然,人们可以在其他地方声明变量。但是没有提到这种情况。
答案 0 :(得分:2)
如果在全局范围内声明了另一个对象,在其他地方,使用复杂的构造函数,则没有实际的方法specify the relative initialization order of these two objects in a portable manner。对于任一对象,在引用之前,您无法期望构造另一个对象。
只要完全理解未指定不同翻译单元中全局对象的相对初始化顺序,声明全局单例对象就没有任何明显的错误。