【发布时间】:2012-12-20 03:19:14
【问题描述】:
如果我按如下方式初始化 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 版本中的一个错误,还是故意这样做的?如果有,为什么?
【问题讨论】:
-
std::array是一个聚合。不过,我认为他们可能会在未来使用一套。 -
@chris 究竟是什么意思?
-
好吧,您知道如何拥有
struct S {int i; int j;};并使用S s = {5, 6};对其进行初始化吗?那是聚合初始化。std::array包含一个内置数组,可以通过初始化列表进行初始化,这就是内部集合。外部集用于聚合初始化。 -
@chris 所以在我的例子中 "{1, 2, 3, 4}" 只是一个 std::initializer_list 对象,它本身必须放在实际的初始化大括号中?
-
好吧,我不太确定在引入该类型后如何处理内置数组初始值设定项列表,但这就是要点,是的。一个用于类,另一个用于类内的数组。
标签: c++ arrays c++11 initialization c++14