为什么静态初始化订单Fiasco这样称呼?

时间:2013-12-04 14:40:15

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

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

那么,为什么这样的名字,而不是例如“[动态]初始化订单Fiasco”?

修改

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

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

3 个答案:

答案 0 :(得分:2)

因为C ++术语很难,而且技术术语经常与口语化的说法相冲突。

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

  • 另一个例子:人们说“一个函数返回一个引用”,但事实并非如此:相反,函数调用的求值总是产生,值永远不会引用。不同之处在于值是否为左值,x值或prvalue,这取决于函数的声明返回类型。但这更令人满口。

答案 1 :(得分:1)

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

你是正确的,只有动态初始化非局部变量才会出现惨败。

  

为什么这么一个名字?

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

答案 2 :(得分:0)

这是因为程序员通常会因为被排除在外的中间人的谬误而堕落。最常见的症状:如果不完美则无用。另一个常见的症状是:如果没有很好地理解一个有倾向性的名称,就会产生一些问题,如“静态初始化顺序惨败”。