为什么 std::array<std::p air<int,int>, 3> 不能使用嵌套的初始值设定项列表进行初始化,但 std::vector<std::p air&



请参阅此示例: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 ) };

相关内容

最新更新