Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.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++ 将初始值设定项\u列表分配给std::array_C++_C++11_Stl - Fatal编程技术网

C++ 将初始值设定项\u列表分配给std::array

C++ 将初始值设定项\u列表分配给std::array,c++,c++11,stl,C++,C++11,Stl,我正在尝试将初始值设定项\u列表分配给std::array,如下所示: std::array<int,2> arr = {0,1}; arr = {0,1,2}; std::array arr={0,1}; arr={0,1,2}; 我立刻得到一个错误,说操作员没有可行的过载= 我知道我不能尝试分配一个大小大于数组大小的初始值设定项列表,但我只是想了解std::array是如何做到这一点的 我试着在查看代码,但在那里没有看到重载运算符。那么std::array如何使用默认运算符=

我正在尝试将初始值设定项\u列表分配给std::array,如下所示:

std::array<int,2> arr = {0,1};
arr = {0,1,2};
std::array arr={0,1};
arr={0,1,2};
我立刻得到一个错误,说操作员没有可行的过载=

我知道我不能尝试分配一个大小大于数组大小的初始值设定项列表,但我只是想了解std::array是如何做到这一点的


我试着在查看代码,但在那里没有看到重载运算符。那么std::array如何使用默认运算符=将此类尝试标记为编译器错误呢。默认运算符=如何知道检查初始值设定项列表的大小?请帮助我理解这一点。

如果您仔细阅读您提供的代码链接,您将在第112行的注释中看到这一点-

//聚合类型没有显式构造/复制/销毁

数组是一种聚合类型,可以像常规数组一样使用带括号的初始值设定项列表来初始化它(其元素是单独的)

代码在第109行和第110行

typedef _GLIBCXX_STD_C::__array_traits<_Tp, _Nm> _AT_Type;
typename _AT_Type::_Type                         _M_elems;
typedef\u GLIBCXX\u STD\u C::\u数组\u traits\u AT\u Type;
typename _AT_Type::_Type _M_elems;
在堆栈上定义大小为2的常规数组

因此,当您将带括号的初始值设定项列表分配给arr时,初始值设定项列表用于创建一个临时
std::array
,然后使用默认的赋值运算符将其复制到数组中。只有当初始值设定项列表的大小小于或等于2时,此操作才会成功。当传递大小大于2的大括号初始值设定项列表时,它会被标记为错误,因为无法从大小大于2的大括号列表构造
std::array