我被告知成员变量的隐式默认初始化优于显式默认初始化。
在Widget1
下面,私有成员i
在调用构造函数时默认初始化。但是在Widget2
中,当调用构造函数时,i
也是默认初始化的。
class Widget1 {
public:
Widget1() : i() {}
private:
int i;
}
class Widget2 {
public:
Widget2() {}
private:
int i;
}
我的问题是:
两种情况下的初始化有什么区别?
如果成员变量比简单POD更复杂,这会改变吗?
一般来说,一种方法比另一种方法更受欢迎吗?
C ++ 03和C ++ 11
答案 0 :(得分:5)
对于第二种情况,我没有初始化,它将以任意值结束,这取决于编译器,还有编译器选项。在带有visual studio的Windows上,如果使用release编译,我将是一个任意值。
所以第一个是首选。
如果'i'不是POD类型,默认情况下,将调用其默认构造函数。