【问题标题】:Why is Static Initialization Order Fiasco called this way?为什么静态初始化顺序惨败会这样称呼?
【发布时间】:2013-12-04 14:40:14
【问题描述】:

由于静态初始化涉及零初始化和使用常量表达式的初始化,根据 C++03 标准,我看不出那里会发生什么惨败。

那么,那么,为什么要使用这样的名称,而不是例如“[Dynamic] Initialization Order Fiasco”?

编辑:

这实际上是一个反问,但我发现我的英语太弱了,无法自我回答。我还松散地使用“静态初始化”作为“在main() 之前发生的所有初始化”的捷径。但是由于“静态”术语已经超载,我写下了这个问题:

  • 提醒一下,“静态初始化”在标准中有正式定义。
  • 收集有关此措辞的任何历史或轶事原因。
  • 对于那些真正被看似悖论弄糊涂的人。

【问题讨论】:

标签: c++ history static-initialization static-order-fiasco


【解决方案1】:

因为 C++ 术语很难,而且技术术语经常与口语表达方式相冲突。

  • 标准中的“静态初始化”就是你所说的,但是人们通常用它来指代“命名对象在命名空间范围内的静态存储持续时间的初始化”。

  • 另一个例子:人们说“函数返回一个引用”,但事实并非如此:相反,函数调用的评估总是产生一个,而值永远不是引用.区别在于该值是左值、xvalue 还是纯右值,这取决于函数声明的返回类型。但这更多的是拗口。

【讨论】:

    【解决方案2】:

    这里的“静态”是指(有点含糊,并不完全准确)具有静态存储持续时间的变量,而不是非局部变量的静态初始化。

    你说得对,惨败只发生在非局部变量的动态初始化中。

    为什么会有这样的名字?

    与任何口语表达一样,人们使用它是因为其他人使用和理解它,即使它不是表达概念的最佳方式。

    【讨论】:

      【解决方案3】:

      这是因为程序员通常会陷入排中谬误。最常见的症状:如果它不完美,它就是无用的。另一个常见的症状是:给一些不太容易理解的东西起一个带有倾向性的名字,比如“静态初始化顺序惨败”。

      【讨论】:

        猜你喜欢
        • 2016-02-28
        • 1970-01-01
        • 1970-01-01
        • 2011-07-15
        • 1970-01-01
        相关资源
        最近更新 更多