作者crazying (追杀大象)
看板NTUGIEE_EDA
标题[转录]Re: [问题] map元素的删除?
时间Fri Jul 1 21:45:03 2005
※ [本文转录自 C_and_CPP 看板]
作者: renderer (rendering) 看板: C_and_CPP
标题: Re: [问题] map元素的删除?
时间: Fri Jul 1 20:02:34 2005
※ 引述《khoguan (Khoguan Phuann)》之铭言:
: ※ 引述《renderer (rendering)》之铭言:
: : 这麽说 即使是 int 的 i++ 也是先加再留下原值罗 ???
: 之前写那样一篇就期望人家理解,的确的是强人所难。
: 我只能先简单说,并无规定先後,由编译器自便,但是到达
: sequence point 时,该evaluate的值,该做的 side effect
: 都得要已经完成。至於哪个地方要有 sequence point 则有
: 明确规定。
我写了一小段 code 来测试这件事:
#include <iostream>
int globalI = 0;
void fun(int paramI)
{
std::cout << globalI << std::endl;
std::cout << paramI << std::endl;
}
int main(int argc, char *argv[])
{
fun(globalI++);
return 0;
}
结果是
1
0
globalI++ 是先加了之後留原值给 fun
所以我多年来 i++ 是「先做完 statement 後加」的观念是错的 @@
好像真的得用 sequence point 的观念来理解才得体
所以 面对 aMap.erase(it++) 其实也不必有感情挣扎
感谢准版主的指点
另外 i++ + 1 i++ 之後有 sequence point 吗
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.228.216.130
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.25.195
1F:推 moonshade:大像最近干嘛一直转这种东西? 203.203.83.73 07/01
2F:推 crazying:说实话 是因为我很无聊...Orz 140.112.25.195 07/01
3F:→ moonshade:............................. 203.203.83.73 07/01
4F:→ moonshade:多看点文学作品修养身心吧... 203.203.83.73 07/01
5F:推 crazying:增进大家 c++ 的小常识 140.112.25.195 07/01
6F:推 yellowfishie:推文学作品 :) 140.112.25.218 07/01
7F:→ moonshade:不要写这个鬼东西就好了... (=_=||||) 203.203.83.73 07/02
8F:→ moonshade:好好的整齐的coding style不用,去学一些 203.203.83.73 07/02
9F:→ moonshade:偷吃步又难读的方法... 203.203.83.73 07/02
10F:推 gwliao:这个对run-time来说, 没啥改变!140.112.230.224 07/02
11F:→ gwliao:但被同伴"阿"的机率会暴增(or 马上就抓起来"啊")140.112.230.224 07/02
12F:→ gwliao:可以用VC应该不变,gcc会变快几个clock cycle吧!140.112.230.224 07/02