美文网首页
关注std::make_pair的C++11实现

关注std::make_pair的C++11实现

作者: dnsir | 来源:发表于2018-11-19 23:44 被阅读36次

    1 为什么

    因为c++增加了通用右值引用(T &&),标准库为了提升性能,很多标准库都进行一些重写,std::make_pair使用也发生了变化。

    2 std::make_pair源码

    #if __cplusplus >= 201103L
      // NB: DR 706.
      template<class _T1, class _T2>
        constexpr pair<typename __decay_and_strip<_T1>::__type,
                       typename __decay_and_strip<_T2>::__type>
        make_pair(_T1&& __x, _T2&& __y)
        {
          typedef typename __decay_and_strip<_T1>::__type __ds_type1;
          typedef typename __decay_and_strip<_T2>::__type __ds_type2;
          typedef pair<__ds_type1, __ds_type2>        __pair_type;
          return __pair_type(std::forward<_T1>(__x), std::forward<_T2>(__y));
        }
    #else
      template<class _T1, class _T2>
        inline pair<_T1, _T2>
        make_pair(_T1 __x, _T2 __y)
        { return pair<_T1, _T2>(__x, __y); }
    #endif
    

    简而言之对于c++新标准来说,__T1和__T2是自动推导,旧的标准是必须指明参数类型。
    新版本使用实例:

    std::queue<std::pair<int, int> > q;
    q.push(std::make_pair(1,2));   //不需要指定模板参数
    

    旧版本使用实例

    std::queue<std::pair<int, int> > q;
    q.push(std::make_pair<int, int>(1,2));
    

    注意std::make_pair使用区别。

    相关文章

      网友评论

          本文标题:关注std::make_pair的C++11实现

          本文链接:https://www.haomeiwen.com/subject/upvzfqtx.html