12

Astd::array<T>本质上是一个包裹在struct. s的初始化struct需要大括号,数组的初始化也需要大括号。所以我需要两对大括号:

std::array<int, 5> a = {{1, 2, 3, 4, 5}};

但是我看到的大多数示例代码只使用了一对大括号:

std::array<int, 5> b = {1, 2, 3, 4, 5};

为什么这是允许的,与第一种方法相比,它有什么好处或缺点吗?

4

1 回答 1

14

好处是你有……更少的打字。但缺点是只有在声明具有该形式时才允许您省略大括号。如果你不使用=,或者如果数组是一个成员并且你用 初始化它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} };
于 2012-01-14T16:00:08.490 回答