为什么即使 base 具有用户声明的构造函数也会发生零初始化
Why does zero-initialization happen even when base has a user-declared constructor?
这打印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++ 中使用它的构造函数初始化 unique_ptrs 的 2D 向量?
- 在C++中使用默认构造函数初始化对象的不同方法
- 使用默认构造函数初始化对象的不同方法
- 我们可以用参数化构造函数初始化结构的数组吗?
- 有没有办法使用该类的构造函数初始化另一个类的私有部分内的对象数组?
- 类内初始化与构造函数初始化列表的顺序
- 通过 C++ 中的重载构造函数初始化未知类型的变量
- 使用复制构造函数初始化 new[]
- 如何从子类的构造函数初始化父类的私有成员
- 在构造函数初始化列表中使用 std::variant
- 使用构造函数初始化结构还是在之后设置其值更好?
- C++ 没有匹配的构造函数初始化 []
- 我正在使用dev c ++,但收到错误(C++98'array'必须由构造函数初始化)
- 使用所述填充构造函数初始化向量中的向量
- 如何同时创建一个具有两个或多个构造函数初始化的对象
- 在 new 关键字中,由默认构造函数初始化的类中的元素是否也使用 new 关键字在C++?
- 这是使用构造函数初始化数组对象的最佳方法吗?
- 内置类型的构造函数初始化
- 构造函数初始化和对象损坏