3

我想初始化std::array一个std::pairvia 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 = { {'{','}'}, {'[',']'}, {'(',')'} };
4

1 回答 1

5

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

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

std::vector是不同的,因为使用大括号初始化列表将导致std::initializer_list构造函数被调用,而不是像std::array.

于 2017-08-06T14:31:06.050 回答