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

3

我想通过std::initializer_list初始化一个std::pairstd::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 = { {'{','}'}, {'[',']'}, {'(',')'} };
1个回答

5

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

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

std::vector 与其他不同,因为使用花括号初始化列表将调用 std::initializer_list 构造函数,而不是像 std::array 那样使用聚合初始化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接