为什么即使base具有用户声明的构造函数,也会发生零初始化?

时间:2015-01-02 20:00:34

标签: c++

打印0,表示data为零初始化。为什么即使base具有用户声明的构造函数,也会发生这种情况?

struct base
{
    base() { }
    int data;
};

struct derived : base
{
    derived() = default;
};

int main()
{
    std::cout << derived().data;
}

如果derived具有用户声明的构造函数,则它会打印出一个随机值。为什么零初始化取决于派生类而不是基类?

1 个答案:

答案 0 :(得分:11)

这些规则专门用于编写

struct S {
  int i;
  std::string s;
};

在没有任何用户提供的构造函数的情况下,即使隐式生成的默认构造函数是非平凡的,S().i也将被初始化为零。这不能取决于int的构造函数,因为int没有任何构造函数。决定让它依赖于类S是否具有用户提供的构造函数。它没有太多可以依赖的东西。

你所看到的只是一个简单的结果。您的班级derived也没有用户提供的构造函数,因此初始化也为零。