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使用区别。
网友评论