通过std :: initializer_list初始化std :: pair在初始化std :: array时不起作用吗?

时间:2017-08-06 14:26:53

标签: c++ c++14 std-pair stdarray stdinitializerlist

我想通过std::array初始化std::pair std::initializer_list

pair<int, int> p = {3,4};//ok
array<pair<char,char>, 3> p = { make_pair('{','}'), make_pair('[',']'), make_pair('(',')') };//ok
array<pair<char,char>, 3> p = { {'{','}'}, {'[',']'}, {'(',')'} };//not ok

为什么我的第三个选项不起作用?此外,这也很好:

vector<pair<char, char>> brackets = { {'{','}'}, {'[',']'}, {'(',')'} };

1 个答案:

答案 0 :(得分:5)

使用支撑的初始化列表初始化std::array有点棘手,因为你需要一组额外的大括号(因为它是一个聚合):

array<pair<char,char>, 3> p = {{ {'{','}'}, {'[',']'}, {'(',')'} }};
                               ^                                 ^

std::vector不同,因为使用支撑的初始值设定项列表会导致调用std::initializer_list构造函数,而不使用像std::array这样的聚合初始化。