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