精華區beta C_and_CPP 關於我們 聯絡資訊
建議你直接看spec.. http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf 這類的問題在spec都闡述的很清楚, 前面的人也都已經提過keyword了.. 建議你可以用 sequence point 和 evaluation 當 keyword就會查到你想要的資料了 ※ 引述《oohay (五黑)》之銘言: : ※ 引述《kesa (blush)》之銘言: : : f(i++, i);-> undefined /* 沒什麼人會這樣搞自己 */ : 這個未定義是因為是因為函數的參數順序未定義. : : a[i++] = i;-> undefeind /*常有人這樣寫*/ (這是 spec 上舉的例子) : ......這是未定義嗎? 我記得是 a[i] = i++; 你會這樣想, 表示你還沒搞懂為什麼 undefine, 重點在於 ++ 被執行的時間點未定, a[i++] = i; 可以是 t = i; i = i + 1; a[t] = i; 也可以是 t = i; a[t] = i; i = i + 1; 兩種不同執行順序會讓 a[t] 被 assign 的值差了 1 第一個例子也會有想同的問題.. : : 都錯在 "Furthermore, the prior value shall be accessed only to dterminie : : the value to be stored (i)" : : 同理 p = z++ + z;-> undefined. /* @@ 考題 */ : 很抱歉,這裏++只打算更新z一次,但是z不會被更新第二次, : 所以請問,上述句子提到"請不要把一個量詞更新超過一次",z+++z符合此條件啊!!! : 所以頂多就是++的效果會發生在非sequence point之處,好比變化只發生在時脈切換處. : 但是,未定義行為發生在哪裏呢? 同理, z = 0; p = z++ + z; p 可能是 0 + 0 也可能是 0 + 1 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.139.134.12 ※ 編輯: cole945 來自: 220.139.134.12 (02/04 10:11) ※ 編輯: cole945 來自: 220.139.134.12 (02/04 10:11) ※ 編輯: cole945 來自: 220.139.134.12 (02/04 10:11)
oohay:那這樣十誡所講a[i]=i++是真是假? 02/04 10:41
oohay:我了解了,最後感想是「謝丞相賜箭」 02/04 11:12
StubbornLin:我之前研究那考題時就有發現 我也有提過++什麼時候跑 02/04 11:17
StubbornLin:不知道這件事 不過我沒有那樣的把握說我一定是對的 02/04 11:18
StubbornLin:人的記憶力有限 把腦力花在更重要的地方上不是更好? 02/04 11:19