由于静态初始化涉及零初始化和使用常量表达式初始化,根据C ++ 03标准,我无法看到那里会出现哪种惨败。
那么,为什么这样的名字,而不是例如“[动态]初始化订单Fiasco”?
修改
这实际上是一个修辞问题,但我发现我的英语太弱而不能自我回答。我还松散地使用“静态初始化”作为“main()
之前发生的所有初始化”的捷径。但由于“静态”术语已经超载,我写下了这个问题:
答案 0 :(得分:2)
因为C ++术语很难,而且技术术语经常与口语化的说法相冲突。
标准中的“静态初始化”就是你所说的,但是人们通常用它来引用“在命名空间范围内使用静态存储持续时间初始化命名对象”。
另一个例子:人们说“一个函数返回一个引用”,但事实并非如此:相反,函数调用的求值总是产生值,值永远不会引用。不同之处在于值是否为左值,x值或prvalue,这取决于函数的声明返回类型。但这更令人满口。
答案 1 :(得分:1)
“静态”这里指的是(有些含糊不清,并不完全准确)具有静态存储持续时间的变量,而不是非局部变量的静态初始化。
你是正确的,只有动态初始化非局部变量才会出现惨败。
为什么这么一个名字?
与任何口语表达一样,人们使用它是因为其他人使用和理解它,即使它不是表达概念的最佳方式。
答案 2 :(得分:0)
这是因为程序员通常会因为被排除在外的中间人的谬误而堕落。最常见的症状:如果不完美则无用。另一个常见的症状是:如果没有很好地理解一个有倾向性的名称,就会产生一些问题,如“静态初始化顺序惨败”。