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);
  • 相关阅读:
    jQuery标准的AJAX模板
    maven库
    在 Windows7 上按照 MySQL5.7
    如何保证代码的有效性
    项目负责人的职责
    string integer == equals 转
    走近AbstractQueuedSynchronizer
    STAR
    tesseract-ocr
    Spring @Qualifier l转
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/5005553.html
Copyright © 2011-2022 走看看