0

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

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

编辑:

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

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

3 回答 3

2

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

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

  • 另一个例子:人们说“一个函数返回一个引用”,但这不是真的:相反,函数调用的评估总是产生一个value,而 values 永远不是引用。区别在于该值是左值、xvalue 还是纯右值,这取决于函数声明的返回类型。但这更像是一口说出来的。

于 2013-12-04T14:43:51.793 回答
1

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

你是正确的,惨败只发生在非局部变量的动态初始化中。

为什么会有这样的名字?

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

于 2013-12-04T14:45:12.430 回答
0

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

于 2013-12-04T15:03:30.427 回答