2017-08-06 119 views
2

我想通过std::initializer_list初始化std::arraystd::pair通过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 = { {'{','}'}, {'[',']'}, {'(',')'} }; 

回答

5

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

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

std::vector是不同的,因为使用支撑初始化器列表将导致调用std::initializer_list构造函数,并且不使用像std::array那样的聚合初始化。