【问题标题】:Initializing std::pair via std::initializer_list doesn't work while initializing an std::array? [duplicate]初始化 std::array 时通过 std::initializer_list 初始化 std::pair 不起作用? [复制]
【发布时间】:2018-01-13 22:30:21
【问题描述】:

我想通过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 = { {'{','}'}, {'[',']'}, {'(',')'} };

【问题讨论】:

    标签: c++ c++14 std-pair stdarray stdinitializerlist


    【解决方案1】:

    用花括号初始化器列表初始化std::array 有点棘手,因为您需要一组额外的花括号(因为它是一个聚合):

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 2015-09-04
      • 1970-01-01
      • 2015-10-05
      • 2012-02-10
      • 2021-03-19
      相关资源
      最近更新 更多