std :: array <T>初始化

fre*_*low 12 c++ arrays initialization curly-braces c++11

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相比,它有任何好处或缺点吗?

Joh*_*itb 14

好处是你有......少打字.但缺点是,当声明具有该形式时,您只能被允许留下大括号.如果您不使用=,或者如果数组是成员并且您使用它进行初始化member{{1, 2, 3, 4, 5}},则不仅可以传递一对大括号.

这是因为当将大括号传递给函数时,担心可能会出现过载歧义,如f({{1, 2, 3, 4, 5}}).但它引起了一些讨论,并且已经生成了问题报告.

从本质上讲,= { ... }初始化总是能够省略大括号,如

int a[][2] = { 1, 2, 3, 4 };
Run Code Online (Sandbox Code Playgroud)

那并不新鲜.新的是你可以省略=,但是你必须指定所有大括号

int a[][2]{ {1, 2}, {3, 4} };
Run Code Online (Sandbox Code Playgroud)