看板 C_and_CPP 關於我們 聯絡資訊
小弟對於13誡之八有點疑惑, 主要在第二個敘述, 以下引述第八誡: =========== 你不可以在一個運算式(expression)中,對一個基本型態的變數修改其值 超過一次以上。否則,將導致未定義的行為(undefined behavior) 你也不可以在一個運算式(expression)中,對一個基本型態的變數修改其值, 而且還在同一個式子的其他地方為了其他目的而存取該變數的值。(其他目的 是指不是為了計算這個變數的新值的目的)。否則,將導致未定義的行為。 =========== 第二個敘述中: "其他目的,是指不是為了計算這個變數的新值的目的" 我的疑惑在於, 此敘述似乎暗指 若是為了計算此變數新值的話 仍然可以讀取該變數的值 但是似乎又不合理 因為想不出任何是為了計算變數新值修改到此變數又去讀取的例子 再者, 也會違反八誡的第一個敘述阿?? x = x++ * x ; <====這樣算是一個case嗎? ------ (A) 也就是說 一般的用法 一個運算式(如同上面的整個式子A)不就是要計算新值的嗎? 那不允許在此目的之外修改某變數再去讀取此變數 不就同等於可以這麼做 @_@? 搞不清楚阿.............. 請各位大大幫忙解惑一下 似乎我有哪邊對於第二個敘述理解錯誤了..... 謝謝~~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.225.76 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1401806034.A.9D8.html
putumaxally:敘述二是不是說 sum = a++ + a++; // int a = 0; 06/03 23:55
purpose:不寫入的話,你可以存取該變數無數次;一旦你寫入了,哪怕 06/04 00:18
purpose:僅只修改該變數一次,也不能再多做讀取,如:v[i] = i++; 06/04 00:19
purpose:即未定義行為。但是 notVarI = i++; 則是有明確結果的運算 06/04 00:20
legendmtg:板上很久沒出現的神人tinlans大大有篇寫得很好 06/04 01:31