我想通过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 = { {'{','}'}, {'[',']'}, {'(',')'} };
答案 0 :(得分:5)
使用支撑的初始化列表初始化std::array
有点棘手,因为你需要一组额外的大括号(因为它是一个聚合):
array<pair<char,char>, 3> p = {{ {'{','}'}, {'[',']'}, {'(',')'} }};
^ ^
std::vector
不同,因为使用支撑的初始值设定项列表会导致调用std::initializer_list
构造函数,而不使用像std::array
这样的聚合初始化。