打印0
,表示data
为零初始化。为什么即使base
具有用户声明的构造函数,也会发生这种情况?
struct base
{
base() { }
int data;
};
struct derived : base
{
derived() = default;
};
int main()
{
std::cout << derived().data;
}
如果derived
具有用户声明的构造函数,则它会打印出一个随机值。为什么零初始化取决于派生类而不是基类?
答案 0 :(得分:11)
这些规则专门用于编写
struct S {
int i;
std::string s;
};
在没有任何用户提供的构造函数的情况下,即使隐式生成的默认构造函数是非平凡的,S().i
也将被初始化为零。这不能取决于int
的构造函数,因为int
没有任何构造函数。决定让它依赖于类S
是否具有用户提供的构造函数。它没有太多可以依赖的东西。
你所看到的只是一个简单的结果。您的班级derived
也没有用户提供的构造函数,因此初始化也为零。