为什么全球定义是“全球定义”;施工日期默认日期(1970,1,1)&引用;糟糕? 阅读《程序设计:使用C++的原理和实践》第二版时,我提出以下的命题:

为什么全球定义是“全球定义”;施工日期默认日期(1970,1,1)&引用;糟糕? 阅读《程序设计:使用C++的原理和实践》第二版时,我提出以下的命题:,c++,global-variables,initialization,C++,Global Variables,Initialization,…如果确实需要全局变量(或常量),您会怎么做 用一个复杂的初始化器?一个合理的例子是我们 希望为我们为库提供的日期类型使用默认值 支持商业交易: 施工日期默认值_日期(1970,1,1);//默认日期为1970年1月1日 我们怎么知道在默认日期之前从未使用过它 初始化?基本上,我们不知道,所以我们不应该写那个 定义 这一行代码让我感到好奇的是,它隐含着在定义全局变量之前使用全局变量的想法。作者(Bjarne Stroupstrup)在初始化前使用全局变量的确切意思是什么?当然,可以在其他地方声明

…如果确实需要全局变量(或常量),您会怎么做 用一个复杂的初始化器?一个合理的例子是我们 希望为我们为库提供的日期类型使用默认值 支持商业交易:

施工日期默认值_日期(1970,1,1);//默认日期为1970年1月1日

我们怎么知道在默认日期之前从未使用过它 初始化?基本上,我们不知道,所以我们不应该写那个 定义


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

如果在全局范围中的其他地方声明了另一个对象,并且使用了复杂的构造函数,那么您就没有实际的方法来实现它。对于任何一个对象,在引用之前都不能期望另一个对象已被构造


声明全局单例对象本身并没有什么错,只要它们有意义,只要完全理解没有指定不同转换单位中全局对象的相对初始化顺序。

如果我得到正确答案,则只有在其他全局初始化引用此默认数据变量时才会出现此问题?正确。在调用
main()
之前,将初始化所有全局对象。这是唯一的保证(除了同一翻译单元中的相对初始化顺序)。如果您可以使全局
constepr
,则可以避免在初始化之前使用它的可能性。对于
日期
而言,这可能是也可能不是,取决于其设计和实施。