C++:数组 <> 太多初始值设定项

not*_*orb 6 c++ initialization aggregate-initialization stdarray

以下代码返回下面的编译错误。我一直无法理解为什么初始化程序太多。该代码使用vector<X>. 有谁知道为什么会报告错误以及如何解决?谢谢

\n\n
#include <iostream>\n#include <array>\nusing namespace std;\n\nstruct X {\n    int x, y;\n};\n\nint main(int argc, char *argv[])\n{\n    array<X,2> a0 = {{0,1}, {2,3}};\n\n    for (auto& p : a0) {\n        cout << p.x << endl;\n        cout << p.y << endl;\n    }\n\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

汇编:

\n\n
g++ -pedantic -Wall test116.cc && ./a.out\ntest116.cc: In function \xe2\x80\x98int main(int, char**)\xe2\x80\x99:\ntest116.cc:11:34: error: too many initializers for \xe2\x80\x98std::array<X, 2>\xe2\x80\x99\n     array<X,2> a0 = {{0,1}, {2,3}};\n
Run Code Online (Sandbox Code Playgroud)\n

Art*_*cca 12

尝试

array<X,2> a0 = {{{0,1}, {2,3}}};
Run Code Online (Sandbox Code Playgroud)

请注意额外的一组大括号。

这看起来有点奇怪,但它是这样的,因为 的唯一成员array是实际的数组:

template <class T, size_t N>
class array {
    T val[N];
    // ...
};
Run Code Online (Sandbox Code Playgroud)

构造函数都是隐式定义的,因此array最终成为一个简单的可构造类型。