精華區beta C_and_CPP 關於我們 聯絡資訊
※ 引述《oohay (五黑)》之銘言: : ※ 引述《linjack (嗯)》之銘言: : : Note that both of these examples have unspecified behavior in C, : : according to the ANSI/ISO standard. : : 上面那兩個例子和 i = i++; 或是 cout << i + i++; 之類都是類似的狀況, : : 我認為可以說是在 Java 中這種詭異兼無聊(?)的操作有被明確定義 order, : : 但是 ISO C/C++ 標準中「有明確定義這種操作會造成未定義行為」 : : 未定義行為就是做 compiler 的人說了算。 : : 不知道為何台灣的大學教授特愛考這種東西,點點點。 : 這裏例子還差一點才到達那個所謂未定義行為, : z++ + z : 對z只打算更新一次. : 十誡第十條所指的必須是在同ㄧexpression打算更新同一變數二次以上. : 那才有未定義行為. 唔? 我覺得這裡有一點這個問題: 到底它是 求(z++)的值(ie.取z的值) => 求z的值 => 加起來 => 做z=z+1 還是 求(z++)的值(ie.取z的值) => 做z=z+1 => 求z的值 => 加起來 這兩個結果不一樣吧 @@ (也就是"z=z+1"什麼時候做) 如果執行前z=5 那第一個順序的+得值10 第二個順序的+得值11 十誡之九也有這麼一段: 你也不可以在一個運算式(expression)中,對一個基本型態的變數修改其值, 而且還在同一個式子的其他地方為了其他目的而存取該變數的值。(其他目的, 是指不是為了計算這個變數的新值的目的)。否則,將導致未定義的行為。 然後根據前面你#17fAH_wr這一篇 Java的順序規定是後面那種 也就是Java做出來一定是11這樣 (應該沒理解錯吧) : 前文Java例子都是這種寫法,但是 cout << i + i++ 並不在這情況內. : 看過Java的規格,感覺是Java並不需要那種複雜的寫法, : 但由於語法相同,許多人會以C的習慣寫Java程式. : 不過,Java不需要像C的漂亮寫作技巧, : 寫 z++ + z 與寫 z++, z+z 意思是一樣. : 這蠻重要的,要不然會有些誤以為Java容易的傻子, : 其實對基本的statement語意都搞不清楚. : 倒想知道外頭那些覺得面是不該考這樣的,是不是Java都寫得順利? -- [LPH] Oops, your OOP's a problem? 說: 你現在還是看不到狗? ************* 說: 看得到 只是 他們不會跑 就一直呆呆在那邊 一直在起點 [LPH] Oops, your OOP's a problem? 說: 你要按"ㄅㄧㄤˋ"它們才會跑啊@@" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.84.44.21 ※ 編輯: LPH66 來自: 219.84.44.21 (02/03 17:06)