[閒聊] x++ 和 ++x 的test...

看板C_and_CPP作者 (.)時間14年前 (2010/05/03 13:21), 編輯推噓6(609)
留言15則, 9人參與, 最新討論串1/1
還在入門學習如何刻程式的在下不才,在昨天拜讀"C++的風格與藝術"一書時, 看到了一行有關++x和x++的作用,理解之後,感覺書上寫的和跑出來的結果怪怪的。 於是就開始了下列的測試: int x = 1; cout << x++ << " " << ++x << " " << x++ << " " << ++x << endl; ^^^ ^^^ ^^^ ^^^ A B C D //ABCD為後面說明之用 執行結果為: 4 5 2 5 // 憑記憶打的...不太確定...回家再測一次 // 後來又試了幾個例子之後,又大概假設出這行的運算過程... 運算順序是由右往左運算,而又會先處理 "++" 在變數前的運算。 ---- Step 1: D 部份的運算 開始x=1,之後遇到 D 部份的 ++x 會先 ++ 但是不把值代入。 D 部份運算後,x = 2,但值不代入,D部份被cout的值還不確定。 ---- Step 2: C 部份的運算 此時x=2,x++為先代值後++,所以C部被cout之後為2。 C 部份運算後,x = 3。 ---- Step 3: B 部份的運算 此時x=3,運算同step 1 先 ++ 但不代入。 B 部份運算後,x = 4,但值不代入,B部份被cout的值還不確定。 ---- Step 4: A 部份的運算 此時x=4,運算同 Step 2,所以A部份被cout的值為4,然後再++。 A 部份運算後,x = 5,而在++前已經把值代入。 ---- Step 5: Final 此時 x = 5,再一次把值代入B和D的部份,故cout出來為5。 ---- 這樣的運算方式放在同一個式子裡的++x和x++混用好像就又不一樣了,規則還抓不到... 到了版上聽說結果會隨著編譯器的不同而有所不同... 查到這裡我就暗暗地下定決心... 以後再也不把這++x和x++混用了。 -- 我的系統為 Intel CPU Debian 5 AMD64 g++ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.76.181

05/03 13:25, , 1F
這不是下不下決心和混用的問題..而是本來就不該在一個式子
05/03 13:25, 1F

05/03 13:26, , 2F
裡出現兩次以上這東西~
05/03 13:26, 2F

05/03 13:27, , 3F
置底十二戒中的第九戒
05/03 13:27, 3F

05/03 13:27, , 4F
原來已經放在戒律之中了,那等等自D
05/03 13:27, 4F

05/03 13:28, , 5F
不必自D 有學習到就好
05/03 13:28, 5F

05/03 13:29, , 6F
那我就不客氣了(P幣入手)
05/03 13:29, 6F

05/03 13:41, , 7F
不過書上到是沒有歸勸避開這種用法...
05/03 13:41, 7F

05/03 13:43, , 8F
更恐怖的是有些考試非常愛這種題目 XD
05/03 13:43, 8F

05/03 13:51, , 9F
這個問題當初也況擾了我好久~
05/03 13:51, 9F

05/03 13:55, , 10F
不用自d拉~~感覺很有意思呢
05/03 13:55, 10F

05/03 14:05, , 11F
不要自D.... (怨念
05/03 14:05, 11F

05/03 14:23, , 12F
推有學到就好, 不用自D :)
05/03 14:23, 12F

05/04 00:45, , 13F
你想通通放在同一行,要先執行誰呢?挺模糊的,分開寫就是了
05/04 00:45, 13F

05/04 06:15, , 14F
這問題我之前也有問過 XD  未定義行為
05/04 06:15, 14F

05/04 06:16, , 15F
教授會出這種題目就代表他不夠資格出題..(除非是深論
05/04 06:16, 15F
文章代碼(AID): #1BtbrBOv (C_and_CPP)