[問題]運算問題

看板C_and_CPP (C/C++)作者 (0.0)時間16年前 (2009/02/04 00:43), 編輯推噓3(3013)
留言16則, 5人參與, 最新討論串1/1
int z = -1; std::cout<<z++ + z<<endl; std::cout<<z + z++<<endl; 請問上面兩個式子有啥不一樣?? 第一個是先Z+Z再Z=Z+1 所以等於-2 但是第二個是0,可是我推不出來誰可以解說一下 而且兩個式子感覺是一樣的 0.0 謝謝 我後來檢查發現第一個式子輸出-2再來z變成0 問題可能出現在這 但是正確的運算優先順序是?? 好困惑= = -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.237.108 ※ 編輯: kobe123 來自: 122.116.237.108 (02/04 00:58)

02/04 01:00, , 1F
undefined behavior
02/04 01:00, 1F

02/04 01:01, , 2F
啥意思@@?
02/04 01:01, 2F

02/04 01:02, , 3F
Z+Z=-2 , Z=Z+1=-1 為啥變0
02/04 01:02, 3F

02/04 01:12, , 4F
int z = -1;
02/04 01:12, 4F

02/04 01:12, , 5F
:cout<<z + z<<endl;
02/04 01:12, 5F

02/04 01:12, , 6F
z++ // 0
02/04 01:12, 6F

02/04 01:12, , 7F
:cout<<z + z<<endl;
02/04 01:12, 7F

02/04 01:12, , 8F
z++ // 1
02/04 01:12, 8F

02/04 01:14, , 9F
推壞了 std::cout<<z + z<<endl;z++;
02/04 01:14, 9F

02/04 01:21, , 10F
Z++那裏要用原來的z來算答案就對了...太粗心了orz|||
02/04 01:21, 10F

02/04 01:36, , 11F
正解是一樓 未定義行為 因為你在z++還沒結算前又去抓z
02/04 01:36, 11F

02/04 01:36, , 12F
這樣z++的時間點是隨人實作的
02/04 01:36, 12F

02/04 01:36, , 13F
(應該說隨compiler實作)
02/04 01:36, 13F

02/04 01:37, , 14F
參考置底十誡之九
02/04 01:37, 14F

02/04 01:52, , 15F
萬年OP阿 ...
02/04 01:52, 15F

02/04 02:25, , 16F
恩恩感謝...忘了看置底0.0
02/04 02:25, 16F
文章代碼(AID): #19Y7GpeJ (C_and_CPP)
文章代碼(AID): #19Y7GpeJ (C_and_CPP)