如果我按如下方式初始化std :: array,编译器会给出一个关于缺少大括号的警告
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版本中的一个错误,还是故意做的?如果是这样,为什么?
3 回答
这是
std::array
的裸实现:它是一个聚合结构,其唯一的数据成员是传统数组,因此内部_1166398用于初始化内部数组 .
在某些情况下允许使用括号省略进行聚合初始化(但通常不推荐),因此在这种情况下只能使用一个支撑 . 看这里:C++ vector of arrays
根据cppreference . 仅当省略
=
时才需要双括号 .C 11中需要双括号,但从C 14开始不需要:
std::array reference