※ 引述《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)