3

在下面的代码上

std::array<int,3> myarray = {10,20,30};

我收到以下编译器警告

warning: missing braces around initializer for ‘std::array<int, 3u>::value_type [3] {aka int [3]}’ [-Wmissing-braces]

为什么 ?

工具链:(编辑)

g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
4

2 回答 2

6

试试这个:

std::array<int,3> = {{10, 20, 30}}

我认为这是他们在 > 4.6 版本中修复的错误

于 2013-02-10T03:49:59.613 回答
6

正如 Tyler 所指出的,std::array它是一个 POD,因此它没有构造函数,并且包含一个数组。要使用大括号语法对其进行初始化,请先初始化变量,然后使用嵌套的大括号初始化变量内的数组。

{ { 10, 20, 30 } }
  ^ For the array member variable inside the std::array object
^ For the std::array object

实际上这是您的编译器中的一个错误,因为聚合初始化允许您在=. 所以这两个是合法的:

std::array<int,3> x = {10, 20, 30};
std::array<int,3> y  {{10, 20, 30}};

但不是

std::array<int,3> z {10, 20, 30};

最后一个在 GCC 上编译,但它是一个非标准扩展,你应该得到一个警告。

于 2013-02-10T03:51:57.273 回答