C ++:显式与隐式默认初始化

时间:2014-04-07 13:46:25

标签: c++ class c++11 initialization

我被告知成员变量的隐式默认初始化优于显式默认初始化。

Widget1下面,私有成员i在调用构造函数时默认初始化。但是在Widget2中,当调用构造函数时,i也是默认初始化的。

class Widget1 {
public:
  Widget1() : i() {}
private:
  int i;
}

class Widget2 {
public:
  Widget2() {}
private:
  int i;
}

我的问题是:

  1. 两种情况下的初始化有什么区别?

  2. 如果成员变量比简单POD更复杂,这会改变吗?

  3. 一般来说,一种方法比另一种方法更受欢迎吗?

  4. C ++ 03和C ++ 11

  5. 中的此行为是否存在差异

1 个答案:

答案 0 :(得分:5)

对于第二种情况,我没有初始化,它将以任意值结束,这取决于编译器,还有编译器选项。在带有visual studio的Windows上,如果使用release编译,我将是一个任意值。

所以第一个是首选。

如果'i'不是POD类型,默认情况下,将调用其默认构造函数。