0

可能重复:
以下短语在 C++ 中是什么意思:零、默认和值初始化?

有很多地方人们说过,对类构造函数的显式调用会导致值初始化[当不存在使用定义的构造函数时],这不是由默认构造函数[这是一个无操作的构造函数]完成的,而是完全不同的东西。

如果没有调用构造函数,实际会发生什么或在这种情况下什么是值初始化?

4

2 回答 2

0

首先,如果没有调用构造函数,实际会发生什么

构造对象时始终调用类类型的构造函数,无论是用户定义的还是编译器生成的。对象已初始化,但成员可以保持未初始化状态。这使得问题的第二部分过时了。

其次,是否有支持/提及/解释这种行为的文档?

万能的标准。

于 2012-08-21T15:27:43.447 回答
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是非聚合类类型,则将始终调用其默认构造函数。

于 2012-08-21T15:30:10.497 回答