考虑以下代码:
#include <array>
struct A
{
int a;
int b;
};
static std::array<A, 4> x1 =
{
{ 1, 2 },
{ 3, 4 },
{ 5, 6 },
{ 7, 8 }
};
static std::array<A, 4> x2 =
{
{
{ 1, 2 },
{ 3, 4 },
{ 5, 6 },
{ 7, 8 }
}
};
static std::array<A, 4> x3 =
{
A{ 1, 2 },
A{ 3, 4 },
A{ 5, 6 },
A{ 7, 8 }
};
static std::array<A, 4> x4 =
{
A{ 1, 2 },
{ 3, 4 },
{ 5, 6 },
{ 7, 8 }
};
使用 gcc 编译:
$ gcc -c --std=c++11 array.cpp
array.cpp:15:1: error: too many initializers for ‘std::array<A, 4ul>’
};
^
$
NB1:注释掉第一个初始化语句,代码编译没有错误。
NB2:将所有初始化转换为构造函数调用会产生相同的结果。
NB3:MSVC2015 的行为相同。
我可以看到为什么第一次初始化无法编译,为什么第二次和第三次都可以。(例如参见C++11:正确的 std::array 初始化?。)
我的问题是:为什么最终的初始化会编译?