2017-08-06 22 views
2

std::arraystd::pairstd::initializer_listで初期化します。std :: arrayを初期化するときに、std :: initializer_listでstd :: pairを初期化することはできません。

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 

なぜ私の3番目のオプションは機能しませんか?またこれは、同様に、正常に動作します:

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

:あなたがかっこの余分なセットを必要とするので

ブレース初期化子リストで std::arrayを初期化
vector<pair<char, char>> brackets = { {'{','}'}, {'[',']'}, {'(',')'} }; 

答えて

5

は、少しトリッキーです(それは集合体であるとして) std::vectorは、括弧で囲まれた初期化子リストを使用するとstd::initializer_listコンストラクタが呼び出され、std::arrayのような集約初期化が使用されないために異なります。

関連する問題