2015-04-23 182 views
1

1)在调用main()之前,类的静态数据成员是否总是被初始化是真的?C++静态数据成员初始化

2)如果类初始化代码的静态数据成员使用其他翻译单元的全局静态变量,是否可以发生“静态初始化顺序失败”?

我在哪里可以阅读更多关于它的内容?我无法在2003年的C++标准中找到答案。

非常感谢。

+0

https://isocpp.org/wiki/faq/ctors#static-init-order – senfen

回答

1

1)在调用main()之前,类的静态数据成员是否总是被初始化是真的?

是的,他们总是会在程序开始执行之前被初始化。

2)如果类初始化代码的静态数据成员使用其他翻译单元的全局静态变量,是否可以发生“静态初始化顺序失败”?

是的,与此同时,它也发生在main()执行之前初始化的其他任何事情。

1

是的两个答案。

请参阅https://isocpp.org/wiki/faq/ctors#static-init-order以便对其进行很好的描述。

+0

我读过它,但它只是关于静态对象,而不是类的静态数据成员。是不是在这种意义上,静态全局对象和静态全局变量之间没有区别? –

+0

类的静态成员不过是顶部带有一些语法糖的常规静态对象(例如访问说明符,名称可见性)。但那只是在编译期间。在运行时,与其他静态对象没有区别。 – Daniel