[問題] 新手十誡的疑問?

看板C_and_CPP作者 (起床氣)時間15年前 (2010/08/16 16:38), 編輯推噓3(3010)
留言13則, 7人參與, 最新討論串1/1
以爬過文,但還是有些不懂 先附上原文 九、你不可以在一個運算式(expression)中,對一個基本型態的變數修改其值 超過一次以上。否則,將導致未定義的行為(undefined behavior)。 錯誤例子: int i = 7; int j = ++i + i++; 正確例子: int i = 7; int j = ++i; j += i++; 你也不可以在一個運算式(expression)中,對一個基本型態的變數修改其值, 而且還在同一個式子的其他地方為了其他目的而存取該變數的值。(其他目的, 是指不是為了計算這個變數的新值的目的)。否則,將導致未定義的行為。 錯誤例子: int arr[5]; int i = 0; arr[i] = i++; 正確例子: int arr[5]; int i = 0; arr[i] = i; i++; [C++程式] 錯誤例子: int i = 10; cout << i << "==" << i++; 正確例子: int i = 10; cout << i << "=="; cout << i++; ----- 我的問題在於,我還是不懂為什麼以上是錯誤例子,因為C++裡,i++和++i的差別 很明確阿。i++是先執行運算、輸出後再++;++i是先++後再執行運算、輸出, 按照這個規則,程式的結果都可預期,也沒有BUG,不知道為什麼算錯誤。 我用的是dev C++,會有差別嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.193.217.183

08/16 16:43, , 1F
整體來看, 標準並沒有規定左邊的先取值還是右邊的先
08/16 16:43, 1F

08/16 16:44, , 2F
取值, 所以這關係到你編譯器怎麼去看待他
08/16 16:44, 2F

08/16 16:45, , 3F
int j = ++i + i++; 如果左邊先取值, 結果就是8+8
08/16 16:45, 3F

08/16 16:45, , 4F
兩個差別當然很明確 但是你不知道哪邊先做啊
08/16 16:45, 4F

08/16 16:45, , 5F
int j = ++i + i++; 右邊先取值, 結果就是9+7
08/16 16:45, 5F

08/16 16:46, , 6F
你也不知道暫時值什麼時候會影響到結果
08/16 16:46, 6F

08/16 16:46, , 7F
兩個相加結果一樣你可能以為這樣沒關係,但是當做函式
08/16 16:46, 7F

08/16 16:47, , 8F
的參數時, 你就可以看出這種寫法的缺點
08/16 16:47, 8F

08/16 17:03, , 9F
只能說盡可能別在自己程式埋下炸彈 XDD
08/16 17:03, 9F

08/16 17:43, , 10F
原來如此 謝謝大家的解答
08/16 17:43, 10F

08/16 19:52, , 11F
簡單來講,就是你第一眼看到算式會不知道怎麼算的就不要用
08/16 19:52, 11F

08/16 20:08, , 12F
不過 很多第一眼看到以為是對的也未必會對... - -||
08/16 20:08, 12F

08/17 12:08, , 13F
基本上這種寫法只有考試的時候會出現...
08/17 12:08, 13F
文章代碼(AID): #1CQFaU5O (C_and_CPP)