gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:04:19 25 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

规则是专门写来涵盖

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

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

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

关于c++ - 为什么即使 base 具有用户声明的构造函数也会发生零初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27747853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com