作者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
推 moonshade:大像最近幹嘛一直轉這種東西? 203.203.83.73 07/01
推 crazying:說實話 是因為我很無聊...Orz 140.112.25.195 07/01
→ moonshade:............................. 203.203.83.73 07/01
→ moonshade:多看點文學作品修養身心吧... 203.203.83.73 07/01
推 crazying:增進大家 c++ 的小常識 140.112.25.195 07/01
推 yellowfishie:推文學作品 :) 140.112.25.218 07/01
→ moonshade:不要寫這個鬼東西就好了... (=_=||||) 203.203.83.73 07/02
→ moonshade:好好的整齊的coding style不用,去學一些 203.203.83.73 07/02
→ moonshade:偷吃步又難讀的方法... 203.203.83.73 07/02
推 gwliao:這個對run-time來說, 沒啥改變!140.112.230.224 07/02
→ gwliao:但被同伴"阿"的機率會暴增(or 馬上就抓起來"啊")140.112.230.224 07/02
→ gwliao:可以用VC應該不變,gcc會變快幾個clock cycle吧!140.112.230.224 07/02