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

Sea*_*nch 1 c++ initialization class c++11

有人告诉我,成员变量的隐式默认初始化优于显式默认初始化.

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

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

class Widget2 {
public:
  Widget2() {}
private:
  int i;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

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

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

  3. 一般来说,一种方法优于另一种方法吗?

  4. C++ 03和C++ 11中的这种行为是否存在差异

Mat*_*att 5

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

所以第一个是首选.

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