std :: array <t>初始化</t>

时间:2012-01-14 15:54:17

标签: c++ arrays initialization c++11 curly-braces

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};

为什么这是允许的,与第一个approch相比,它有任何好处或缺点吗?

1 个答案:

答案 0 :(得分: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} };