由于静态初始化涉及零初始化和常量表达式初始化,根据 C++03 标准,我看不出那里会出现什么惨败。
那么,那么,为什么要用这样的名称,而不是例如“[Dynamic] Initialization Order Fiasco”?
编辑:
这实际上是一个反问,但我发现我的英语太弱了,无法 self 回答。我还松散地使用“静态初始化”作为“在 main()
之前发生的所有初始化”的快捷方式。但由于“静态”一词已经过载,我写下了这个问题:
- 提醒一下,“静态初始化”在标准中有正式定义。
- 收集此措辞的任何历史或轶事原因。
- 对于真正被表面上的悖论搞糊涂的人。
最佳答案
因为 C++ 术语很难理解,而且技术术语经常与口语化的表达方式发生冲突。
标准中的“静态初始化”是你说的,但人们通常用它来指代“静态存储持续时间的 namespace 范围内的命名对象的初始化”。
另一个例子:人们说“一个函数返回一个引用”,但事实并非如此:相反,函数调用的计算总是产生一个值,而值永远不是引用.不同之处在于该值是左值、xvalue 还是 prvalue,这取决于函数声明的返回类型。但这比较啰嗦。
关于c++ - Static Initialization Order Fiasco 为什么这样称呼?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20378207/