Benjamin

静以修身,俭以养德,非澹薄无以明志,非宁静无以致远。
随笔 - 397, 文章 - 0, 评论 - 196, 引用 - 0
数据加载中……

VS2012 error C2664: “std::make_pair”:无法将左值绑定到右值引用

在vs2012(c++11)make_pair()改动:
C++11: template <class T1, class T2> pair<V1, V2> make_pair(T1&& x, T2&& y);如果没有指定类型,它会自动推导.
C++03: template <class T1, class T2> pair<T1, T2> make_pair(T1 x, T2 y);
如果make_pair用在了insert中,建议直接构造一个pair对象,然后再insert.
比较通用的方法是是static_cast强转成右值引用。

例如:_mapTransportInfos.insert(std::make_pair<uint32, CTransportInfoPtr>(iter_t->m_nID, pinfo));
这句代码在vs2012的c++11就无法编译,报2664错误。可以用如下强制转换来实现:
_mapTransportInfos.insert(std::make_pair<uint32, CTransportInfoPtr>(static_cast<uint32&&>(iter_t->m_nID),
                           staic_cast<CTransportInfoPtr&&>(pinfo)));
也可以这样改:pair<uint32,CTransportInfoPtr> ps = pair<uint32,CTransportInfoPtr>((iter_t->m_nID,pinfo);
_mapTransportInfos.insert(ps);






posted on 2013-11-14 09:34 Benjamin 阅读(3138) 评论(0)  编辑 收藏 引用 所属分类: C/C++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理