std :: array <int,10 =“”>作为类成员零初始化?</int,>

时间:2013-06-25 12:29:27

标签: c++ c++11 stdarray

struct MyClass
{
  std::array<int, 10> stdArr;

  MyClass() : stdArr()
  {}
};

MyClass c;

问题:

  1. c.stdArr是否已初始化?
  2. 如果是 - 为什么?
  3. 我自己的矛盾答案:

    1. 零初始化: std::array希望表现得像c-array。 如果在上面的示例中stdArr是一个c数组,它将在初始化列表中由stdArr()进行零初始化。我希望在初始化列表中写member()来初始化对象。

    2. 它不是零初始化:

      • std::array通常只有一个成员,我的情况是int[10] _Elems;
      • 通常基本类型和基本类型数组(如int[N])不是默认初始化的。
      • std::array是一种聚合类型,暗示它是默认构造的。
      • 因为没有自定义构造函数初始化_Elems,我认为它不是零初始化。
    3. 根据C ++ 11标准,std::array的正确行为是什么?

2 个答案:

答案 0 :(得分:19)

  

c.stdArr是否已初始化?

  

如果是 - 为什么?

执行stdArr的{​​{3}}:

MyClass() : stdArr() {}

在此上下文中,值初始化的效果是对象的value initialization

修改zero initialization

中有大量相关信息

答案 1 :(得分:0)

“std :: array想要表现得像c-array”并不是标准描述行为的方式。它是用户定义的类型,用户定义类型的成员通过调用其构造函数来初始化,即array<int,10>::array()