我有以下代码:
#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;
}
我希望这会返回一个大小为1的向量,包含看起来像这样的2d数组:
[
[[2, 1, 0], [1, 1, 0]]
]
然而,它返回一个大小为2的向量,其中两个数组如下所示:
[
[[2, 1, 0], [0, 0, 0]],
[[1, 1, 0], [0, 0, 0]]
]
在我看来它应该能够构造两个内部大小为3的数组,然后使用它来构造单个大小的2数组以将其放入向量中。
我很困惑。任何帮助解释为什么这不符合我的预期会很棒。
在Visual Studio Online Compiler和Clang中测试。
答案 0 :(得分:1)
std::array
是aggregate type,它没有带initializer-list
的构造函数,因此每个std::array
需要两个括号:
std::vector<std::array<std::array<double, 3>, 2>> arr =
{
{{
{{2, 1, 0}},
{{1, 1, 0}}
}}
};
您可以在g ++中使用-Wmissing-braces
启用此类警告(默认情况下,clang会在-Wall
处启用此警告)。