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

dar*_*613 2 c++ arrays oop constructor struct

假设我建立了一个C ++类,如下所示:

class Foo{
  public:
    struct Pair{
      int x;
      int y;
      Pair(){ x = 2; y = 4; }
    };

  private:
    Pair pairArr[16];
}
Run Code Online (Sandbox Code Playgroud)

如果不另外初始化pairArr,则其中的Pair结构的默认值是什么?C ++是调用构造函数(用x = 2,y = 4初始化它)还是尚未创建对象,使我剩下一个“垃圾”对象数组,直到我自己初始化索引为止?

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

gsa*_*ras 5

类和结构在是等效的,只是默认的访问说明符有所不同。因此,检查Arrays和Classes,它说:

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


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

Pair() : x(2), y(4) { std::cout << "Called\n"; }
Run Code Online (Sandbox Code Playgroud)

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

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


提示:使用初始化列表,而不是在构造函数的主体内分配值。

  • 您应该建议使用成员初始化而不是在ctor主体中进行赋值。 (3认同)