编译器的 ctor 的行为是什么?

What is the behavior of the compiler's ctor?

本文关键字:是什么 ctor 编译器      更新时间:2023-10-16

如果我像这样定义一个类的actor和tor,

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而在另一种情况下是垃圾?

[class. tor]/6

…隐式定义的默认构造函数执行类的一组初始化由用户为该类编写的默认构造函数执行,该类没有元素初始化式(12.6.2),且为空复合语句。

也就是说,编译器生成的构造函数与

相同。
Test() {}

由于a没有被构造函数显式初始化,所以a没有被初始化。