→ james732:應該就是不要在同一行裡面對一個變數又改又讀的意思...? 02/04 18:10
→ cfbbq:我知道,但是我覺得沒錯阿,只要不要<<i++ + i;這種就好吧? 02/04 18:13
→ cfbbq:<<i++<<i;這不是一個運算是阿! 02/04 18:14
推 ledia:<< 也是運算子呀 02/04 18:27
推 LPH66:問題如同前幾篇 i++結算的時間不確定 02/04 18:33
→ LPH66:雖然順序是由左到右 (<<是左結合) 但i++卻不確定會何時結算 02/04 18:33
→ cfbbq:我的疑問是:cout<<i++<<i;跟cout<<i++;cout<<i;似乎等於? 02/04 19:45
→ akasan:表面上一樣而已cout<<i++;cout<<i;會保證其求值順序 02/04 20:14
→ akasan:cout<<i++<<i;則是無法確定到底是i先求值還是i++先求值 02/04 20:15
→ cfbbq:<<是左結合,可以保証上面的樓上的i++先求值? 02/04 20:22
推 LPH66:求值歸求值 問題在於i什麼時候+1 02/04 21:24
→ LPH66:後面的寫法在第一個;時確定i已經加1了 02/04 21:24
→ LPH66:前面的寫法則要到那條的;才會確定i已經加1 02/04 21:25
→ LPH66:但這卻是在前式後面的 i 求值之後 02/04 21:25
→ LPH66:至於此時的 i加1 和 後面的i求值 這兩件事是不確定先後的 02/04 21:26
→ LPH66:(順帶一提, 某些compiler因為方便實作的關係 02/04 21:26
→ LPH66: 左結合的東西會實作成每個operand是反過來求值 02/04 21:27
→ LPH66: 至於是不是一定反過來求則一樣是未規定) 02/04 21:27
推 LPH66:噢我忘了 overloaded operator 等於 function call...@_@ 02/04 21:37
→ LPH66:所以下下篇是對的 這裡剛好是特例 前面的i++會在後面i前結算 02/04 21:38
推 StubbornLin:結合的順序不代表賦值(evaluate)的順序 02/04 21:49
→ akasan:無聊去測一下...cout << i++ << i; GCC跟VC一樣是12 02/05 14:56
→ akasan:cout << i << i++;則VC是21 GCC是11 02/05 14:57
→ akasan:實測或許只代表有compiler沒照標準走但寫CODE還是盡量繞過 02/05 14:59
→ akasan:這種模糊地帶 免得哪天有BUG了還不知道怎麼一回事:D 02/05 15:00