3
默认值和零初始化混乱
我对value-&default-&zero-initialization感到非常困惑。特别是当他们采用不同的标准C ++ 03和C ++ 11(和C ++ 14)时。 我在这里引用并尝试扩展一个很好的答案Value- / Default- / Zero-Init C ++ 98和C ++ 03,使其更通用,因为如果有人可以帮助填写,它将对很多用户有所帮助需要差距才能很好地了解何时会发生什么? 简而言之,通过示例全面了解: 有时由new运算符返回的内存将被初始化,有时并不取决于您要更新的类型是POD(普通旧数据),还是它是包含POD成员并且正在使用a的类。编译器生成的默认构造函数。 在C ++ 1998中,有两种初始化类型:零初始化和默认初始化 在C ++ 2003中,第三种初始化类型是值初始化。 在C ++ 2011 / C ++ 2014中,仅添加了列表初始化,并且value- / default- / zero-initialization的规则有所更改。 承担: struct A { int m; }; struct B { ~B(); int m; }; …