社区
C++ 语言
帖子详情
不说话
无知者无谓
2006-11-17 04:42:21
map<int, string> m;
/*
这里加入元素
0 one
1 two
.
.
.
9 ten
*/
map<int, string>::iterator iter = m.begin ();
while (iter != lst.end ()
cout << iter->first << ":" << iter++->second << endl;
会发生什么,为什么?
...全文
325
19
打赏
收藏
不说话
map m; /* 这里加入元素 0 one 1 two . . . 9 ten */ map::iterator iter = m.begin (); while (iter != lst.end () cout <first << ":" <second << endl; 会发生什么,为什么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
无知者无谓
2007-03-20
打赏
举报
回复
因为你有iter++,所以,很危险很危险。
貌似,因为map的iterator是class,结果还能是确定的。
==========================================================
不知道结果你确定是什么了?表光说可以确定,却不去确定呀?
无知者无谓
2007-03-20
打赏
举报
回复
表吵,在这之前我好像没有看到任何提到过异常吧?还是我看错了?
不用提醒我看什么书,我看过的书不会比你少的,你应该去提醒上面的人看什么书。本来这就是有异常,我只是想利用这个异常来提醒异常出现的原因--函数参数入栈问题而已。结果我没有看到有人提到过有异常,可悲!!!!
现在整个C/C++版都成了灌水乐园了,伤心呀。5年前刚到这的时候还是有很好的氛围,也可能当时大家上网的机会都比较少,都没时间灌水的缘故罢。现在上网时间多了,什么问题都有,到处都是学生作业问题,而且一发都是好几帖,而这些问题早有答案,难道不会搜索一下吗?
随便BS一下那些满是星星的人一天到晚在这散分,还一堆人无聊得在那抢分,不亦乐乎......
taodm
2007-03-20
打赏
举报
回复
呵呵,如果你真的看过也不迟。我试过结果,并且找过权威书籍给解答。你呢?
taodm
2007-03-14
打赏
举报
回复
呃,楼主如果还会回头看这个帖子,不妨找《More Exceptional C++》 item 20看一看吧。
无知者无谓
2007-03-14
打赏
举报
回复
而且这里面绝对是要异常退出的,一段完全错误的代码........
操作的顺序应该是(iter->second) → (iter++) → (iter->first)
这里的后缀++操作符是没有问题的,iter->second之后才是iter++,但是由于入栈顺序问题,在最后一个元素时会出现iter->second正常,iter++到m.end(),一个无效的iterator,再进行iter->first的时候异常
不要看到++了,就进入习惯性思维
无知者无谓
2007-03-14
打赏
举报
回复
本不想给分的,不过还是要结贴
看代码,我就只知道while少了一个右括号!!!其它不知道
==============
Sorry,打字快了没注意检查!
iter- >first是第一次函数调用的参数,iter++- >second是第二次函数调用的参数。我以为不会在第一次函数调用前计算第二个函数的参数表达式。刚试了下,有些编译器上确实会提前计算表达式,感觉上好像有点浪费空间。
==============
其实这里面主要不是++运算符的问题,而是入栈的顺序问题,上面的提到了一点点
chijingde
2006-11-20
打赏
举报
回复
有点意思
标记一下
期待楼主的高论
taodm
2006-11-20
打赏
举报
回复
你认为的要点未必是真的要点。
一共是2个要点:1)各运算子的求值顺序不定
2)自定义类型的后缀++是立即运算的,而内建类型的后缀++一般是在整个语句执行后才运算的。
无知者无谓
2006-11-20
打赏
举报
回复
此贴留一个月后,我会回来结帖的。
无知者无谓
2006-11-20
打赏
举报
回复
都没人提到要点上。
goldcool
2006-11-20
打赏
举报
回复
看代码,我就只知道while少了一个右括号!!!其它不知道
iambic
2006-11-17
打赏
举报
回复
iter->first是第一次函数调用的参数,iter++->second是第二次函数调用的参数。我以为不会在第一次函数调用前计算第二个函数的参数表达式。刚试了下,有些编译器上确实会提前计算表达式,感觉上好像有点浪费空间。
taodm
2006-11-17
打赏
举报
回复
<<有顺序却没有说iter->first 先计算还是iter++->second 先计算啊。
iambic
2006-11-17
打赏
举报
回复
<<是有运算顺序的吧。
taodm
2006-11-17
打赏
举报
回复
真是的,非得说白了吗。
老问题了,就是(i++)+(++i)类似问题。
一个表达式里,如果出现了i++/++i,并且i又出现了多次,那么结果(绝大部分情况下)将是未定义的。因为C、C++没有明确规定运算顺序!
写代码,绝对要避开这个陷阱。
iambic
2006-11-17
打赏
举报
回复
哦?看不出来。楼下继续。
jixingzhong
2006-11-17
打赏
举报
回复
...
LiChenYue
2006-11-17
打赏
举报
回复
看不懂,开蹭分!
taodm
2006-11-17
打赏
举报
回复
因为你有iter++,所以,很危险很危险。
貌似,因为map的iterator是class,结果还能是确定的。
突然吐字不清_
说话
晚、吐字不清,怎么才能让孩子快点开口
说话
?
博客介绍孩子语言问题,包括
说话
晚、吐字不清、仿说、肢体语言有问题四个方面。分析原因有家庭语言环境、运动过少、原始反射不整合。提出解决办法,如让孩子充分运动、练习精细动作,用身心脑重塑课程方法帮助整合原始反射。
通透的人:不分享、不
说话
、不社交
本文探讨了一种独特的生活态度——不分享、不
说话
、不社交。这类人通过内心的宁静、倾听与独处找到真正的满足与幸福。
三岁不
说话
,是自闭症前兆吗?
本文探讨了三岁孩子不
说话
的多种原因,包括自闭症、听力问题、智力发育迟缓等,并提供了初步判断方法及应对策略。
突然吐字不清_突然
说话
吐字不清的原因
博客主要探讨
说话
吐字不清的原因,包括心理因素、语言神经中枢发育不良、发音器官功能障碍、语言发育迟缓、先天生理因素、后天错误发音习惯等。还指出舌系带短与吐字不清无关,吐字不清有9种类型,一般可找专业老师矫正。
突然吐字不清_要注意
说话
吐字不清小心是脑中风前兆
本文介绍了脑中风发病前可能出现的十种前兆,包括
说话
吐字不清、头晕、眩晕等症状,帮助读者及早识别并采取措施。
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章