对象成员数组C++默认初始化

Default initialization of C++ member array of objects?

本文关键字:默认 初始化 C++ 数组 成员 对象      更新时间:2023-10-16

假设我有一个C++类,如下所示:

class Foo{
  public:
    struct Pair{
      int x;
      int y;
      Pair(){ x = 2; y = 4; }
    };
  private:
    Pair pairArr[16];
}

如果不以其他方式初始化 pairArr,其中的 Pair 结构的默认值是多少?C++调用构造函数(用 x=2、y=4 初始化它(还是尚未创建对象,在我自己初始化索引之前留下一个"垃圾"对象数组?

我知道如果它是一个原始数据类型的数组,它们是默认初始化的(如果我有一个整数数组,它们都是 0(。但是,我不知道这种行为是否适用于更复杂的对象,例如我这里的结构。

和结构在 c++ 中是等效的,只是默认访问说明符不同。所以检查数组和类,它说:

普通数组声明样式对数组中的每个对象使用默认构造函数(如果类具有默认构造函数(


从实际的角度来看,在您的结构中执行此操作:

Pair() : x(2), y(4) { std::cout << "Calledn"; }

您将看到该消息被打印 16 次。

当您想知道所谓的内容(通常是它们的顺序(时,这是一种常用的方法(将打印消息添加到构造函数到析构函数(。


提示: 使用初始值设定项列表,而不是在构造函数主体内赋值。