c++11 std::make_pair
场景:VS2012带的C++11库中std:make_pair的有关问题
VS2012带的C++11库中std::make_pair的问题
这是VS2012RTM版本中带的标准库中std::make_pair的实现,而且我只找到这一个实现,没有其它重载和特化版本。
两个参数都是非常量右值引用,非常量右值是不能绑定到左值的。如果在代码中使用下面的代码是编译不过的了。
当你要往一个std::map中添加数据时,可能得换成下面这样的语法了。
不知是否还有其他的解决方法,请各位指点。
------解决方案--------------------
模板里右值引用碰到左值会变成左值引用,以此来实现完美转发。
但是一般函数右值引用就不能传入左值。
make_pair会自动推导类型,不会自动推导用什么make_pair。。。直接声明得了
而且std::pair很诡异好像自带隐式类型转换,会根据类型能否转换自动匹配。
------解决方案--------------------
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很诡异好像自带隐式类型转换,会根据类型能否转换自动匹配。
------解决方案--------------------