看板 C_and_CPP 關於我們 聯絡資訊
小弟CPP程式新手 想請問各位一個++與陣列搭配的問題 code如下 #include<iostream> int main() { int a[3]={0,0,0}; int x=2; a[x++] = --x; for(int i=0;i<3;i++) cout<<a[i]; system("PAUSE"); return 0; } 我用dev c++ 跟code::blocks 執行出來的結果都是002 用的compiler是gcc v5.3 但是同學用code::blocks 編譯完相同的code 結果是010 想請問各位大大怎麼看這段碼? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.162.69.65 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1488930972.A.1B2.html
jerryh001: 未定義行為 結案 03/08 08:27
loveflames: 問我怎麼看,我只會說題目爛死了 03/08 08:46
testPtt: 看asm碼比較看看 03/08 09:08
loveflames: 未定義行為看ASM沒意義 03/08 09:33
b0920075: 佔版面吧 03/08 11:33
stupid0319: 跟雞生蛋問題一樣,自找麻煩 03/08 11:44
Zero0910: 去把置底13誡的第8點背起來 XD 03/08 11:55
loveflames: 很多老師喜歡教這個來害人 03/08 12:01
Sidney0503: 雖然是十三誡 C++17好像會規範 等三年後就有固定答案 03/08 12:09
steve1012: 到底為啥要這樣寫lol百思不解 03/08 12:12
devilstan: a[x++] = --x; 幹嘛這樣寫? 03/08 13:01
LPH66: C++17 不是已經在眼前了嗎... 03/08 13:19
soheadsome: "c++17為啥要三年後 今年不是2017了嗎... 03/08 13:29
Neisseria: 這樣寫程式碼比較緊湊啊 (誤超大) 03/08 13:51
asd456fgh778: 沒意義XD 03/08 14:19
Caesar08: 17的規定是右邊先執行,再來才是左邊 03/08 14:19
loveflames: 關鍵字是什麼?想查一下規格 03/08 14:21
Sirctal: 回soheadsome 是等C++20?? 03/08 14:34
Caesar08: p0145r2是那個提案的編號 03/08 14:35
Caesar08: 剛看了一下,有p0145r3的更新版本 03/08 14:38
HolyBugTw: 20年前左右的PL曾經說過部分compiler會先處理右邊 03/08 15:36
HolyBugTw: 所以那一行等同 x=1; a[1]=x; x=2 03/08 15:38
HolyBugTw: PL => programming languages 03/08 15:39
Zero0910: 因為是未定義啊 所以有先處理右邊的compiler 也會有左邊 03/08 15:46
Zero0910: 先取值的compiler 03/08 15:46
wtchen: 到底哪個老師亂教這種東西.... 03/08 19:36
OctupusTea: 這是「未定義行為」,會因為編譯器和系統不同而有不 03/09 14:18
OctupusTea: 同的結果 03/09 14:18