Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;阵列警告_C++_Arrays_Stl - Fatal编程技术网

C++ c++;阵列警告

C++ c++;阵列警告,c++,arrays,stl,C++,Arrays,Stl,关于以下代码 std::array<int,3> myarray = {10,20,30}; 试试这个: std::array={{10,20,30} 我认为这是他们在版本>4.6中修复的一个bug,正如泰勒指出的,std::array是一个POD,因此它没有构造函数,并且包含一个数组。要使用大括号语法初始化它,需要先初始化变量,然后使用嵌套的大括号初始化变量内的数组 { { 10, 20, 30 } } ^ For the array member variable insi

关于以下代码

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

std::array={{10,20,30}


我认为这是他们在版本>4.6中修复的一个bug,正如泰勒指出的,
std::array
是一个POD,因此它没有构造函数,并且包含一个数组。要使用大括号语法初始化它,需要先初始化变量,然后使用嵌套的大括号初始化变量内的数组

{ { 10, 20, 30 } }
  ^ For the array member variable inside the std::array object
^ For the std::array object
实际上,这是编译器中的一个bug,因为聚合初始化允许您在
=
之后删除一层大括号。所以这两个是合法的:

std::array<int,3> x = {10, 20, 30};
std::array<int,3> y  {{10, 20, 30}};
std::array x={10,20,30};
std::数组y{{10,20,30};
但不是

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

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

我们应该猜猜您使用的是什么工具链吗?不过,在g++4.7上只使用一对大括号。在我的mac、LLVM 4.2上也可以使用单括号。因此,我问他有什么链的原因。@WhozCraig显然是聚合初始化允许你在
=
@SethCarnegie之后删除一层是的,我现在明白了。有趣的是,如果没有它,您需要有容器意识。但至少您仍然可以这样做,这比旧的实现中的许多事情都要多。@Seth“但不是
std::array z{10,20,30};
std::array<int,3> x = {10, 20, 30};
std::array<int,3> y  {{10, 20, 30}};
std::array<int,3> z {10, 20, 30};