C + + 11:更正std ::数组初始化?

如果我初始化一个std ::数组如下,编译器给我一个关于缺less大括号的警告

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

这解决了这个问题:

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

这是警告信息:

 missing braces around initializer for 'std::array<int, 4u>::value_type [4] {aka int [4]}' [-Wmissing-braces] 

这只是我的gcc版本中的一个错误,还是故意完成的? 如果是这样,为什么?

这是std::array

 template<typename T, std::size_t N> struct array { T __array_impl[N]; }; 

它是一个集合结构,其唯一的数据成员是一个传统的数组,这样内部{}用于初始化内部数组。

在某些情况下,使用集合初始化(通常不推荐)允许使用大括号,因此在这种情况下只能使用一个大括号。 看到这里: 数组的向量

据cppreference 。 只有省略=时,才需要双大括号。

 // construction uses aggregate initialization std::array<int, 3> a1{ {1,2,3} }; // double-braces required std::array<int, 3> a2 = {1, 2, 3}; // except after = std::array<std::string, 2> a3 = { {std::string("a"), "b"} };