C_and_CPP 板


LINE

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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1488979714.A.705.html
1F:推 Hazukashiine: 下次老師就會加註:「請用C++17規則作答」03/08 21:30
2F:推 sinker5566: 感謝大大03/08 21:34
3F:→ loveflames: 過度重視求值順序跟運算子優先順序,我覺得害處很大03/08 22:10
4F:→ loveflames: 別人看到這種code還得去查表03/08 22:10
5F:推 descent: 為什麼 c++17 要定這個標準?03/08 22:36
6F:→ Caesar08: 因為有人發現,unspecified behavior會變成03/08 22:49
7F:→ Caesar08: undefined behavior03/08 22:49
8F:→ Caesar08: 讀p0145r3就可以知道原因了03/08 22:50
9F:→ james732: 沒有明確的定義,有帶來任何好處嗎?03/08 23:29
10F:推 wtchen: 感謝,已補充進13誡(覺得C++愈來愈龜毛)03/08 23:44
11F:→ final01: 為啥到c++17才規定...03/08 23:50
12F:→ uranusjr: 有規範是好事啦, 除非要讓它 syntax error 不然就是個雷03/09 00:03
13F:→ uranusjr: 有規則的雷總比沒規則的雷要好03/09 00:03
14F:→ loveflames: 不要過度使用就是03/09 00:08
15F:→ MOONRAKER: 不明確定義,方便compiler自由發揮。03/09 05:02
補充一個比較複雜的例子 //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
16F:推 pili100: 這樣寫code有比較清楚嗎?定義這個感覺吃飽太閒03/09 17:44
17F:→ loveflames: 定義是需要啦,不要濫用就好03/09 17:52
18F:推 wtchen: C++17真的閒到去定義這個?03/09 18:14
19F:→ loveflames: 我這篇寫的都有定義03/09 18:27
20F:推 AstralBrain: E1(E2,E3)這裡的E2,E3應該沒規定順序?03/09 19:02
我得更正前面的結論 看到置底十三誡的f(++i,++i),沒查來源就直接套了 查規格書查半天都找不到 後來才知道在17雖然已不是undefined behavior 但仍是unspecified behavior 為避免混亂,這兩行不要理它
21F:→ loveflames: 17有規定函數參數的求值順序03/09 19:22
22F:→ loveflames: E1.E2應該要算成上面的那個,所以拿掉03/09 20:14
23F:推 wtchen: 我寫的時候是參照這裡 03/09 23:10
25F:推 wtchen: 已經把f(++i,++i)拿掉,感謝指正(真是亂到我都搞不懂) 03/09 23:12
26F:→ loveflames: 除了這個例子沒找到,其他我在規格書都有翻到 03/09 23:28
27F:→ loveflames: 大多寫在5.2節,而list-initIialization寫在其他地方 03/09 23:29
28F:→ loveflames: f(i = -1, i = -1)不是從左到右,它合法的原因是 03/09 23:33
29F:→ loveflames: 進入function前每個argument的副作用會處理完畢 03/09 23:40
30F:推 wtchen: 不懂,那f(i=-1, i=1)的話,i會是-1還是1? 03/09 23:48
31F:→ loveflames: unspecified behavior 03/10 00:15
32F:→ loveflames: 左右方向隨編譯器定的 03/10 00:18
想到一個好例子,這個有查過規格書可以掛保證 T x(E1,E2); //unspecified T x{E1,E2}; //E1 -> E2 ※ 編輯: loveflames (36.237.103.169), 03/10/2017 10:15:38







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP