Re: [問題] ++ 與陣列的問題
看板C_and_CPP (C/C++)作者loveflames (咕啾咕啾魔法陣)時間9年前 (2017/03/08 21:28)推噓10(10推 0噓 22→)留言32則, 12人參與討論串2/2 (看更多)
a[x++] = --x符合E1=E2形式,先處理--x的計算與副作用
--x為前置運算,先處理副作用,x減1,這裡可以得到a[x++] = 1
再來處理a[x++]的計算與副作用
x++為後置運算,先進行計算,得到a[1],接著x加1
即a[1] = 1,x為2
對17的新規則還不熟,有誤請更正
不過老師考這個是害人,即便在17已經合法
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.217.248.34
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1488979714.A.705.html
推
03/08 21:30, , 1F
03/08 21:30, 1F
推
03/08 21:34, , 2F
03/08 21:34, 2F
→
03/08 22:10, , 3F
03/08 22:10, 3F
→
03/08 22:10, , 4F
03/08 22:10, 4F
推
03/08 22:36, , 5F
03/08 22:36, 5F
→
03/08 22:49, , 6F
03/08 22:49, 6F
→
03/08 22:49, , 7F
03/08 22:49, 7F
→
03/08 22:50, , 8F
03/08 22:50, 8F
→
03/08 23:29, , 9F
03/08 23:29, 9F
推
03/08 23:44, , 10F
03/08 23:44, 10F
→
03/08 23:50, , 11F
03/08 23:50, 11F
→
03/09 00:03, , 12F
03/09 00:03, 12F
→
03/09 00:03, , 13F
03/09 00:03, 13F
→
03/09 00:08, , 14F
03/09 00:08, 14F
→
03/09 05:02, , 15F
03/09 05:02, 15F
補充一個比較複雜的例子
//A為函數指標陣列,f為物件的方法
i=0;
++i = A[i++](i++,++i).f(i++);
規則
E1 = E2: E2->E1
E1 = E2: E1與E2的計算->E1的賦值
E1(E2,E3): E1->E2->E3
推導過程
a[0](i++,++i).f(i++),i=1
a[0](1,++i).f(i++),i=2
a[0](1,3).f(i++),i=3
a[0](1,3).f(3),i=4
++i為前置運算,副作用早於計算, i=5
結果為i = a[0](1,3).f(3)
※ 編輯: loveflames (60.248.56.181), 03/09/2017 13:23:34
推
03/09 17:44, , 16F
03/09 17:44, 16F
→
03/09 17:52, , 17F
03/09 17:52, 17F
推
03/09 18:14, , 18F
03/09 18:14, 18F
→
03/09 18:27, , 19F
03/09 18:27, 19F
推
03/09 19:02, , 20F
03/09 19:02, 20F
我得更正前面的結論
看到置底十三誡的f(++i,++i),沒查來源就直接套了
查規格書查半天都找不到
後來才知道在17雖然已不是undefined behavior
但仍是unspecified behavior
為避免混亂,這兩行不要理它
→
03/09 19:22, , 21F
03/09 19:22, 21F
→
03/09 20:14, , 22F
03/09 20:14, 22F
推
03/09 23:10, , 23F
03/09 23:10, 23F
→
03/09 23:10, , 24F
03/09 23:10, 24F
推
03/09 23:12, , 25F
03/09 23:12, 25F
→
03/09 23:28, , 26F
03/09 23:28, 26F
→
03/09 23:29, , 27F
03/09 23:29, 27F
→
03/09 23:33, , 28F
03/09 23:33, 28F
→
03/09 23:40, , 29F
03/09 23:40, 29F
推
03/09 23:48, , 30F
03/09 23:48, 30F
→
03/10 00:15, , 31F
03/10 00:15, 31F
→
03/10 00:18, , 32F
03/10 00:18, 32F
想到一個好例子,這個有查過規格書可以掛保證
T x(E1,E2); //unspecified
T x{E1,E2}; //E1 -> E2
※ 編輯: loveflames (36.237.103.169), 03/10/2017 10:15:38
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
16
27