编译器的行为是什么?

时间:2014-07-19 02:45:18

标签: c++

如果我像这样定义一个类的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而另一个案例中为垃圾?

1 个答案:

答案 0 :(得分:2)

[class.ctor] / 6

  

...隐式定义的默认构造函数执行该类的初始化集合   由用户编写的该类的默认构造函数执行,没有 ctor-initializer (12.6.2)并且为空   复合语句。 ...

换句话说,编译器生成的构造函数与

相同
Test() {}

由于构造函数未显式初始化a,因此a未初始化。

相关问题