std::array<int, 10> 作为类成员是否初始化为零?

Is std::array<int, 10> as class member zero-initialized?

本文关键字:成员 是否 初始化 lt array int gt std      更新时间:2023-10-16
struct MyClass
{
  std::array<int, 10> stdArr;
  MyClass() : stdArr()
  {}
};
MyClass c;

问题:

  1. c.stdArr初始化为零吗?
  2. 如果是 - 为什么?

我自己矛盾的答案:

  1. 它是零初始化的: std::array想要表现得像一个c数组。如果在我上面的例子中stdArr是一个 c 数组,它将通过初始化列表中的stdArr()初始化为零。我希望在初始化列表中写入member()初始化对象。

  2. 它不是零初始化的:

    • std::array通常只有一个成员,就我而言int[10] _Elems;
    • 通常,基本类型和基本类型的数组(如 int[N](不会默认初始化。
    • std::array 是一个聚合类型,这意味着它是默认构造的。
    • 因为没有初始化_Elems的自定义构造函数,我认为它不是零初始化的。

根据C++11标准,std::array的正确行为是什么?

c.stdArr初始化为零吗?

是的

如果是 - 为什么?

这将执行stdArr的值初始化

MyClass() : stdArr() {}

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

编辑什么是聚合和 POD 中有很多相关信息...?

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