zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    C#事务相关
    建造者模式
    CUPS/Printer sharing
    vim note write
    linux下神奇的script
    Nginx server之Nginx添加ssl支持
    nginx使用ssl模块配置HTTPS支持
    stardict dict url
    收银台(POSBox) 配置向导
    让 Odoo POS 支持廉价小票打印机
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/5005553.html
Copyright © 2011-2022 走看看