作者查詢 / guesd
作者 guesd 在 PTT [ C_and_CPP ] 看板的留言(推文), 共24則
限定看板:C_and_CPP
看板排序:
首頁
上一頁
1
下一頁
尾頁
7F→:其實是未定義的 語法上的結合順序只決定了如何運算08/11 00:26
8F→:而運算順序除了有相依時是沒有規定的08/11 00:27
9F→:C裡給變數值是運算副作用 因此取xy的值未必會在+-運算存入後08/11 00:28
27F→:http://c-faq.com/expr/xorswapexpr.html08/11 08:12
28F→:不過我搞錯了,這邊y沒有更動兩次所以沒有這個問題08/11 08:12
29F→:y=y+(x-=y)這部份,固然x-=y的部份會是運算完的結果08/11 08:15
30F→:但是並沒有保證y+(-=)的y取值是在之前或之後08/11 08:16
31F→:不過這邊y並沒有另外更動過所以沒這個問題08/11 08:16
32F→:有問題的是再多串一個如x-=y+=x-=y;這樣 最後的x -= (=+...)08/11 08:17
33F→:這裡的x可以是一開始運算完的x-=y;或是沒運算過的x或是其他08/11 08:17
34F推:即使這符合standard裡assignment的lvalue規範仍會造成未定義08/11 08:20
35F→:不過關鍵也不在取值而在是在同時更動同變數兩次或以上就是了08/11 08:29
36F→:不管是透過=或<op>=或是++ --,取值有問題的是類似a[i]=i++08/11 08:30
37F→:即使=右邊取的值沒問題,不過不能保證左邊的a[i]到底是抓誰08/11 08:31
57F→:呃,assignment並不造成sequence point所以也沒有延後update08/11 15:40
58F→:的問題,除非full expression或一些shortcut op才會產生sp08/11 15:41
82F→:我想你說的是"In all cases, the assignment is sequenced08/12 08:31
83F→:after the value computation of the right and left operan08/12 08:31
84F→:and before the value computation of the assignment expr.08/12 08:31
85F→:吧?這的確限制了你能取得x -= y的值時x已經update過了08/12 08:33
86F→:但是問題是它只規範相依性而不是強制的結算點08/12 08:33
87F→:所以在sp之前有其他平行對x取值或update時仍然無法確定順序08/12 08:34
102F→:嗯 我講的是那個情況沒錯 原本的y-=x+=y;是不會有這個問題08/12 16:40
103F→:所以我以為你在講c++中所有的assignment都不會undefined了:P08/12 16:41
首頁
上一頁
1
下一頁
尾頁