什么时候C++隐式类型初始化为0?

Dre*_*ann 6 c++ initialization built-in-types

在与同事讨论之后我对此产生了一些怀疑......

正如标题所要求的那样,何时可以假设内置类型将被初始化为0而不是未知值?

规则是否因c ++标准而异?

Rei*_*ica 6

完整规则在[dcl.init](C++ 11)中.总结一下:当声明中没有提供初始化时,该实体就是所谓的默认初始化.对于类类型,这意味着调用默认构造函数.对于非类型,这意味着不执行初始化.

但是,[dcl.init]§9声明:"在进行任何其他初始化之前,静态存储持续时间的每个对象在程序启动时都是零初始化的."

这意味着非类型的静态持续时间变量(例如命名空间范围变量)是零初始化的.非类类型的其他对象(例如局部变量)初始化.