【发布时间】:2021-04-29 23:18:12
【问题描述】:
在this和this关于零初始化的讨论之后,我想澄清一下这两个段落zero-initialization CPP reference在什么情况下同时出现:
- 作为非类类型和值初始化序列的一部分 对于没有值初始化的类类型的成员 构造函数,包括聚合元素的值初始化 没有为其提供初始化程序。
从本段中我了解到,类成员必须没有构造函数。
如果 T 是非联合类类型,则所有基类和非静态数据 成员初始化为零,所有填充初始化为零 位。 构造函数(如果有)将被忽略。
但是从这个我了解到类成员的构造函数,如果有(他们应该没有),被忽略 .
那么,在什么情况下我可以为一个类成员定义一个构造函数并且仍然忽略它的构造函数?
我用A和B这两个类做了一个实验,构造A{}调用B()(显然)因为c=1。只有B() = default; 会变成c=0。
class B
{
public:
B() : c{1} {}
int c;
};
class A
{
public:
A() = default;
B b;
};
有可能吗?提前谢谢你。
【问题讨论】:
-
这是指c++98标准吗?在 C++98 文档中,零初始化总是发生,这是不正确的措辞。
-
Afaik 这适用于 C++11 及更高版本
标签: c++ constructor initialization