欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

vs2012带的c++11库中std:make_pair的有关问题

更新时间: 2015-03-03 14:38:03 责任编辑: Author_N10

 

VS2012带的C++11库中std::make_pair的问题
这是VS2012RTM版本中带的标准库中std::make_pair的实现,而且我只找到这一个实现,没有其它重载和特化版本。
C/C++ code

template<class _Ty1,
    class _Ty2> inline
    pair<typename _Unrefwrap<_Ty1>::type,
        typename _Unrefwrap<_Ty2>::type>
        make_pair(_Ty1&& _Val1, _Ty2&& _Val2)
    {    // return pair composed from arguments
    typedef pair<typename _Unrefwrap<_Ty1>::type,
        typename _Unrefwrap<_Ty2>::type> _Mypair;
    return (_Mypair(_STD forward<_Ty1>(_Val1),
        _STD forward<_Ty2>(_Val2)));
    }



两个参数都是非常量右值引用,非常量右值是不能绑定到左值的。如果在代码中使用下面的代码是编译不过的了。
C/C++ code

T1 t1;
T2 t2;
std::make_pain(t1, t2);


当你要往一个std::map中添加数据时,可能得换成下面这样的语法了。
C/C++ code
std::pair(t1, t2);


不知是否还有其他的解决方法,请各位指点。

--参考方法--
模板里右值引用碰到左值会变成左值引用,以此来实现完美转发。

但是一般函数右值引用就不能传入左值。

make_pair会自动推导类型,不会自动推导用什么make_pair。。。直接声明得了

而且std::pair很诡异好像自带隐式类型转换,会根据类型能否转换自动匹配。


--参考方法--
探讨

模板里右值引用碰到左值会变成左值引用,以此来实现完美转发。

但是一般函数右值引用就不能传入左值。

make_pair会自动推导类型,不会自动推导用什么make_pair。。。直接声明得了

而且std::pair很诡异好像自带隐式类型转换,会根据类型能否转换自动匹配。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2015-03-03 14:38:03
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/1162424/
本文WWW.DOC100.NET DOC100.NET版权所有。