[閒聊] x++ 和 ++x 的test...
還在入門學習如何刻程式的在下不才,在昨天拜讀"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
05/03 13:27, 4F
→
05/03 13:28, , 5F
05/03 13:28, 5F
→
05/03 13:29, , 6F
05/03 13:29, 6F
→
05/03 13:41, , 7F
05/03 13:41, 7F
→
05/03 13:43, , 8F
05/03 13:43, 8F
推
05/03 13:51, , 9F
05/03 13:51, 9F
推
05/03 13:55, , 10F
05/03 13:55, 10F
推
05/03 14:05, , 11F
05/03 14:05, 11F
推
05/03 14:23, , 12F
05/03 14:23, 12F
推
05/04 00:45, , 13F
05/04 00:45, 13F
推
05/04 06:15, , 14F
05/04 06:15, 14F
→
05/04 06:16, , 15F
05/04 06:16, 15F