有很多地方人们说过,对类构造函数的显式调用会导致值初始化[当不存在使用定义的构造函数时],这不是由默认构造函数[这是一个无操作的构造函数]完成的,而是完全不同的东西。
如果没有调用构造函数,实际会发生什么或在这种情况下什么是值初始化?
有很多地方人们说过,对类构造函数的显式调用会导致值初始化[当不存在使用定义的构造函数时],这不是由默认构造函数[这是一个无操作的构造函数]完成的,而是完全不同的东西。
如果没有调用构造函数,实际会发生什么或在这种情况下什么是值初始化?
首先,如果没有调用构造函数,实际会发生什么
构造对象时始终调用类类型的构造函数,无论是用户定义的还是编译器生成的。对象已初始化,但成员可以保持未初始化状态。这使得问题的第二部分过时了。
其次,是否有支持/提及/解释这种行为的文档?
万能的标准。
这仅适用于聚合:考虑一下:
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
是非聚合类类型,则将始终调用其默认构造函数。