【问题标题】:C++ static data members initializationC++ 静态数据成员初始化
【发布时间】:2015-04-23 09:18:39
【问题描述】:

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

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

我可以在哪里阅读有关它的更多信息?我在 2003 年的 C++ 标准中找不到答案。

非常感谢。

【问题讨论】:

标签: c++ initialization static-members


【解决方案1】:

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

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

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

是的,除此之外,在main() 执行之前初始化的所有其他事情也会发生这种情况。

【讨论】:

    【解决方案2】:

    两个答案都是。

    请参阅 https://isocpp.org/wiki/faq/ctors#static-init-order 以获得详细说明。

    【讨论】:

    • 我读过它,但它只是关于静态对象,而不是关于类的静态数据成员。从这个意义上说,静态全局对象和静态全局变量没有区别是不是?
    • 类的静态成员只不过是带有一些语法糖的常规静态对象(例如访问说明符,名称可见性)。但这只是在编译期间。在运行时与其他静态对象没有区别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 2015-05-18
    • 2011-08-04
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多