编译下面的代码时,我在VC2010中遇到错误C2078.
struct A
{
int foo;
double bar;
};
std::array<A, 2> a1 =
// error C2078: too many initializers
{
{0, 0.1},
{2, 3.4}
};
// OK
std::array<double, 2> a2 = {0.1, 2.3};
Run Code Online (Sandbox Code Playgroud)
我发现正确的语法a1是
std::array<A, 2> a1 =
{{
{0, 0.1},
{2, 3.4}
}};
Run Code Online (Sandbox Code Playgroud)
问题是:为什么需要额外的括号a1但不是必需的a2?
更新
这个问题似乎并不特定于std :: array.一些例子:
struct B
{
int foo[2];
};
// OK
B meow1 = {1,2};
B bark1 = {{1,2}};
struct C
{
struct
{
int a, b;
} …Run Code Online (Sandbox Code Playgroud) A std::array<T>本质上是一个包裹在一个C风格的数组struct.structs 的初始化需要大括号,并且数组的初始化也需要大括号.所以我需要两对括号:
std::array<int, 5> a = {{1, 2, 3, 4, 5}};
Run Code Online (Sandbox Code Playgroud)
但是我见过的大多数示例代码只使用了一对大括号:
std::array<int, 5> b = {1, 2, 3, 4, 5};
Run Code Online (Sandbox Code Playgroud)
为什么这是允许的,与第一个approch相比,它有任何好处或缺点吗?