如何在C++11中初始化(通过初始化器列表)多维std::数组

How do you initialize (through initializer lists) a multidimensional std::array in C++11?

本文关键字:初始化 列表 std 数组 多维 C++11      更新时间:2023-10-16

我试图通过初始化器列表初始化一个2D std::数组,但是编译器告诉我初始化器太多了。

例如:

std::array<std::array<int, 2>, 2> shape = { {1, 1},
                                            {1, 1} };

编译器错误:错误:‘std::array<std::array<int, 2ul>, 2ul>’ 的初始化程序太多

但显然没有太多。我做错什么了吗?

尝试再添加一对{},以确保我们正在初始化内部C数组。

std::array<std::array<int, 2>, 2> shape = {{ {1, 1},
                                             {1, 1} }};

或者干脆放下所有的括号。

std::array<std::array<int, 2>, 2> shape = { 1, 1,
                                            1, 1 };

我建议(甚至没有尝试过,所以我可能错了)

typedef std::array<int, 2> row;
std::array<row,2> shape = { row {1,1}, row {1,1} };