看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《nswrthh (xjapan)》之銘言: : a是一個變數,那麼++a和a++是哪裡不同?他們的定義各是什麼? 小弟我論等一下很快就會有人推文說為什麼不爬文/看書/google....XD 觀念性或者細節我不會說, 我們直接用簡單的例子來看看差在哪裡.... int a, b, c; a = 0; b = a++; // 會得到 b 為 0. a = 0; c = ++a; // 會得到 c 為 1. 也就是在一個statement裡, 對a的取值是在+=1之前還是+=1之後做:) 所以上面的兩個例子也可以重新拆開理解成下面這樣子的表示法.... a = 0; b = a; a += 1; a = 0; a += 1; c = a; 在有些時候, 兩者基本上沒什麼不同(也許compiler最佳化前有差異) 在有些時候, 這兩者弄錯了不是array會爆掉, 就是有錯誤結果@_@" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.174.98 ※ 編輯: VictorTom 來自: 220.132.174.98 (04/18 18:13)
MOONRAKER:上次有人鬧一個笑話:他寫了一個程式,大意是 04/18 23:39
MOONRAKER:while (a<100) { a=a++; } 結果下場是永遠跑不完… 04/18 23:40
MOONRAKER:喔對了,當然前面有 int a=0; 04/18 23:41
MOONRAKER:不過這其實是eval order的問題。compiler-dependent. 04/18 23:42
VictorTom:不知道為什麼看到這個自己和自己運算的statement, 就想 04/19 00:36
VictorTom:到小弟剛學會用 a^=b^=a^=b; 這種方法耍帥來swap時遇到 04/19 00:37
wowtiger:結果還是單純的 mov 比較快 因為 xor 沒法並行 mov 可以 04/19 00:39
VictorTom:的悲劇: sort一個array, 沒注意到換了a[i]和a[i]...Orz 04/19 00:40
wowtiger:阿 抱歉 原來還有要推文阿 04/19 00:41
VictorTom:並行?? temp swp不會有WAR的問題嗎?_? 雖然看起來可以 04/19 00:43
VictorTom:用reg rename來解決; w大不會啦, 我剛想太久了^^|| 04/19 00:43
VictorTom:因為我一時想不起來當初到底幹了什麼蠢事debug了半天XD 04/19 00:43
wowtiger:所以有些 trick 還是要知道為何有這個 trick 存在 04/19 00:46
VictorTom:其實說真的除了少用個temp我還真不知道它的trick在哪Orz 04/19 00:57
wowtiger:trick就在不用temp這樣而已XD 這是CPU只有一個reg才需要 04/19 01:00
VictorTom:所以有些trick應該拿來當歷史故事書看一看就好....XDDD 04/19 01:21