注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

mie

 
 
 

日志

 
 

C++11的auto自动推导类型中的“坑”  

2015-04-23 18:43:17|  分类: 新技术、新领域、 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
        曾经说过C++11中的mutex存在的问题,这次本人再次踩到雷区。
        我的本意是,尽可能地节约内存,所以,我写出了下面的代码:
map<int, DATA> vlist;
DATA * myself=....
for( auto node : vlist)
{
if(&node.second==myself)
//做一些事情
}

        理论上这是没有错误的,然而,这个判断始终失败,跟踪发现node.second的地址和myself不同,且不在vlist中!
       原来,auto类型时,编译器将这个map节点复制了一份,不但是节点的iterator,更包括节点的数据内容!
       所以,对于for(auto,我们应该使用for(auto &的方式,即:
for( auto & node : vlist)
{
if(&node.second==myself)
//做一些事情
}

By:zhanyonhu
  评论这张
 
阅读(992)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016