如果我像这样定义一个类的ctor和dtor,
struct Test
{
//Test(){}
//~Test(){}
int a;
}
int main()
{
Test t;
std::cout << t.a << std::endl;
//^Prints garbage if ctor/dtor are defined, 0 if commented out.
}
为什么一个案例中a
为0而另一个案例中为垃圾?
答案 0 :(得分:2)
[class.ctor] / 6
...隐式定义的默认构造函数执行该类的初始化集合 由用户编写的该类的默认构造函数执行,没有 ctor-initializer (12.6.2)并且为空 复合语句。 ...
换句话说,编译器生成的构造函数与
相同Test() {}
由于构造函数未显式初始化a
,因此a
未初始化。