繁体   English   中英

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

[英]Default initialization of C++ member array of objects?

假设我建立了一个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)。 但是,我不知道这种行为是否适用于像我的struct这样的更复杂的对象。

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

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


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

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

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

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


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM