2017-08-06 149 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那樣的聚合初始化。