嵌套的初始化列表没有像我期望的那样构造嵌套数组

Nested initializer lists don't construct the nested arrays as I would expect

我有以下代码:

#include <iostream>
#include <vector>
#include <array>

using namespace std;

int main()
{
    std::vector<std::array<std::array<double, 3>, 2>> arr =
    {
      {
        {2, 1, 0},
        {1, 1, 0}
      }
    };

    cout << "Array size " << arr.size() << endl;
}

我希望这是 return 大小为 1 的向量,包含如下所示的二维数组:

[
  [[2, 1, 0], [1, 1, 0]]
]

但是它 return 是一个大小为 2 的向量,其中两个数组如下所示:

[
  [[2, 1, 0], [0, 0, 0]],
  [[1, 1, 0], [0, 0, 0]]
]

在我看来它应该能够构建两个内部大小为 3 的数组,然后使用它来构建单个大小为 2 的数组以将其放入向量中。

我很困惑。任何解释为什么这不像我预期的那样表现的帮助都会很棒。

在 Visual Studio 在线编译器和 Clang 中测试。

std::array 是一个 aggregate type,它没有接受 initializer-list 的构造函数,因此每个 std::array:[=17= 都需要两个括号]

std::vector<std::array<std::array<double, 3>, 2>> arr =
{
  {{
    {{2, 1, 0}},
    {{1, 1, 0}}
  }}
};

您可以在 g++ 中使用 -Wmissing-braces 启用此类警告(clang 默认使用 -Wall 启用此警告)。