在C ++中显式构造函数调用的值初始化?

时间:2012-08-21 15:24:35

标签: c++ class default-constructor value-initialization

  

可能重复:
  What do the following phrases mean in C++: zero-, default- and value-initialization?

有很多地方人们都说过对类构造函数的显式调用导致值初始化[当没有使用已定义的构造函数时]并且这不是由默认构造函数[这是一个无操作的构造函数]完成的]但是完全不同。

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

2 个答案:

答案 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是非聚合类类型,则将始终调用其默认构造函数。