嵌套的初始化列表没有像我期望的那样构造嵌套数组
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
启用此警告)。
我有以下代码:
#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
启用此警告)。