c++ - Static Initialization Order Fiasco 为什么这样称呼?

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

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

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

编辑:

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

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

最佳答案

因为 C++ 术语很难理解,而且技术术语经常与口语化的表达方式发生冲突。

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

  • 另一个例子:人们说“一个函数返回一个引用”,但事实并非如此:相反,函数调用的计算总是产生一个,而值永远不是引用.不同之处在于该值是左值、xvalue 还是 prvalue,这取决于函数声明的返回类型。但这比较啰嗦。

关于c++ - Static Initialization Order Fiasco 为什么这样称呼?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20378207/

相关文章:

c++ - 必须在C++文件中写头文件中声明的变量类型吗?

c++ - 三个相互关联的对象 C++

multithreading - “Steam Method” THE'-Multiprogramming System”中的 “Structure of ' Dijkstra是什么意思?

c++ - 在统一的内联初始化中使用不可复制的值初始化静态 std::map

c++ - 如果我对 float 变量使用 malloc 和 calloc 并将其分配给 int 那么其余 2 个字节会发生什么?

c++ - 用 const 复制相同的方法?

javascript - javascript 的第一次实现用了多长时间?

python - 多次拟合时 keras fit() 的历史

java - 为什么父类(super class)中的静态 block /静态变量在 main 之前初始化?

c++ - 静态初始化时能否安全创建线程?