为什么全局定义“const Date default_date(1970,1,1);”坏?

时间:2016-11-27 01:28:30

标签: c++ global-variables initialization

在阅读编程:使用C ++的原理和实践,第2版一书时,我发表了以下声明:

  

...如果你真的需要一个全局变量(或常数),你会怎么做   使用复杂的初始化程序?一个似是而非的例子就是我们   想要一个我们为库提供的Date类型的默认值   支持商业交易:

     

const Date default_date(1970,1,1); // the default date is January 1, 1970

     

我们怎么知道default_date之前从未使用过   初始化?基本上,我们无法知道,所以我们不应该写那个   定义...

让我对这行代码感到好奇的是在定义之前使用全局变量的隐含思想。作者(Bjarne Stroupstrup)在初始化之前使用全局变量的确是什么意思?当然,人们可以在其他地方声明变量。但是没有提到这种情况。

1 个答案:

答案 0 :(得分:2)

如果在全局范围内声明了另一个对象,在其他地方,使用复杂的构造函数,则没有实际的方法specify the relative initialization order of these two objects in a portable manner。对于任一对象,在引用之前,您无法期望构造另一个对象。

只要完全理解未指定不同翻译单元中全局对象的相对初始化顺序,声明全局单例对象就没有任何明显的错误。