可能重复:
What do the following phrases mean in C++: zero-, default- and value-initialization?
有很多地方人们都说过对类构造函数的显式调用导致值初始化[当没有使用已定义的构造函数时]并且这不是由默认构造函数[这是一个无操作的构造函数]完成的]但是完全不同。
如果没有调用构造函数,实际会发生什么?在这种情况下,值初始化是什么?
答案 0 :(得分:0)
首先,如果没有调用构造函数,实际会发生什么
在构造对象时,总是调用类类型的构造函数,无论是用户定义的还是编译器生成的。对象已初始化,但成员可以保持未初始化状态。这使问题的第二部分过时了。
第二,是否有支持/提及/解释此行为的文档?
全能的标准。
答案 1 :(得分:0)
仅适用于聚合:请考虑以下事项:
struct Holder
{
Aggregate a;
NonAggr n;
Holder(int, char) : a(), n() { }
Holder(char, int) { }
};
Holder h1(1, 'a');
Holder h2('b', 2);
假设Aggregate
是聚合类型。现在h1.a
是值初始化的,它对每个成员进行值初始化,而h2.a
是默认初始化的,默认初始化每个成员。同样适用于n
成员,但如果NonAggr
是非聚合类类型,则将始终调用其默认构造函数。