通过 std::initializer_list 初始化 std::pair 在初始化 std::array 时不起作用?
Initializing std::pair via std::initializer_list doesn't work while initializing an std::array?
我想通过 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
.
这样的聚合初始化
我想通过 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
.