类POD成员默认初始化与零初始化与不初始化?

时间:2015-01-23 07:48:22

标签: c++ c++11 c++14

关于这个主题有很多问题,但其中许多使用不准确的术语,答案大多是部分的。我会尝试以另一种方式提出这个问题,并希望能够对这个常见问题提出一个完美的答案。

  1. 在POD的情况下,默认初始化和零初始化之间有什么区别?

  2. 如果构造函数初始化列表中没有初始化成员POD变量,那么它将是:

    • 零初始化。
    • 默认初始化(如果与上述不同)。
    • 没有初始化。
  3. 上面问题2的答案是否取决于是使用new运算符在堆栈上还是在堆上创建类的实例

  4. 对于C ++ 98,C ++ 11或C ++ 14,上述任何问题的答案是否有所不同?

1 个答案:

答案 0 :(得分:4)

  1. 在默认初始化中,基本的“C”式类型(int,double,char,bool等)具有不确定的值。也就是说,没有未定义的行为,但值可以是任何值。

  2. 如果POD成员未在构造函数中初始化,也未通过C ++ 11类内初始化,则默认初始化。

  3. 无论是堆栈还是堆,答案都是一样的。

  4. 在C ++ 98中(而不是之后),new int()被指定为执行零初始化。

  5. 参考:http://en.cppreference.com/w/cpp/language/default_initialization