std::array<T>
本质上是一个包裹在struct
中的C风格数组。初始化struct
需要花括号,而初始化数组也需要花括号。因此我需要两对花括号:
std::array<int, 5> a = {{1, 2, 3, 4, 5}};
但是我看到的大多数示例代码只使用了一对花括号:
std::array<int, 5> b = {1, 2, 3, 4, 5};
这种做法为什么被允许?与第一种方法相比,它有哪些好处或缺点?请注意保留HTML标签。
std::array<T>
本质上是一个包裹在struct
中的C风格数组。初始化struct
需要花括号,而初始化数组也需要花括号。因此我需要两对花括号:
std::array<int, 5> a = {{1, 2, 3, 4, 5}};
但是我看到的大多数示例代码只使用了一对花括号:
std::array<int, 5> b = {1, 2, 3, 4, 5};
=
,或者如果数组是成员并使用 member{{1, 2, 3, 4, 5}}
进行初始化,则不能仅传递一对大括号。
这是因为当大括号传递给函数时会引发可能的重载歧义问题,例如 f({{1, 2, 3, 4, 5}})
。但这引起了一些讨论,并生成了一个问题报告。
本质上,= { ... }
的初始化一直可以省略花括号,例如:
int a[][2] = { 1, 2, 3, 4 };
这并不是新的。新的是你可以省略=
,但是你必须指定所有的括号。
int a[][2]{ {1, 2}, {3, 4} };