c – 初始化std :: array时,通过std :: initializer_list初始化std :: pair不起作用?
作者:互联网
参见英文答案 > How should I brace-initialize an std::array of std::pairs? 2个
我想通过std :: initializer_list初始化std :: pair的std :: array.
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 = { {'{','}'}, {'[',']'}, {'(',')'} };
解决方法:
使用支撑的初始化列表初始化std :: array有点棘手,因为你需要一组额外的大括号(因为它是一个聚合):
array<pair<char,char>, 3> p = {{ {'{','}'}, {'[',']'}, {'(',')'} }};
^ ^
std :: vector是不同的,因为使用支撑的初始化列表将导致调用std :: initializer_list构造函数,而不使用像std :: array这样的聚合初始化.
标签:stdarray,std-pair,c,c14,stdinitializerlist 来源: https://codeday.me/bug/20190828/1751005.html