请参阅此示例:https://godbolt.org/z/5PqYWP
为什么这个对数组不能像对向量一样初始化?
#include <vector>
#include <array>
int main()
{
std::vector<std::pair<int,int>> v{{1,2},{3,4},{5,6}}; // succeeds
std::array <std::pair<int,int>, 3> a{{1,2},{3,4},{5,6}}; // fails to compile
}
您需要添加一对外部大括号来初始化std::array<...>
对象本身:
std::array <std::pair<int,int>, 3> a{{{1,2},{3,4},{5,6}}};
最外层的一对用于数组对象,第二对用于对象内部的聚合数组。然后是数组中元素的列表。
类模板std::array
的特殊化表示包含另一个聚合的聚合。
错误的原因是该声明中的第一个支撑初始值设定项
std::array <std::pair<int,int>, 3> a{{1,2},{3,4},{5,6}};
^^^^^
被认为是内部聚合的初始值设定项。在这种情况下,以下支撑初始化器被视为冗余初始化器。
所以你可以写
std::array <std::pair<int, int>, 3> a{ { {1,2},{3,4},{5,6} } };
^ ^
|the inner aggregate|
或类似
std::array <std::pair<int, int>, 3> a{ std::make_pair( 1, 2 ), std::make_pair( 3, 4 ), std::make_pair( 5, 6 ) };