美文网首页
关注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