[英]CppCheck warning: expression depends on order of evaluation in x = x |= (1 << 3)
C中的代碼行是
x = x |= (1 << 3);
給出cppCheck錯誤:“表達式'x = x | = 1'取決於副作用的評估順序”
而線
x |= (1 << 3);
沒關系。
我想
x = x |= (1 << 3);
應該是一樣的
x = x = x | (1 << 3);
這只是
x = (x = (x | (1 << 3)));
實際上x的外部賦值沒有效果,這意味着結果與之相同
x |= (1 << 3);
那么CppCheck究竟在這里抱怨什么呢?
編輯:認為這是為什么j = j++
與上面提到的問題中討論的j++
相同或不同的重復。
兩次修改相同值的表達式是不需要允許的可憎行為(或者在任何情況下,不需要明確定義,即我們不必找出說出他們做什么的方式,以及編譯器不必支持它們)。
C標准並不強制要求任何關於這些類型的表達式的內容,因此在所有環境中都沒有特定的評估順序。
就副作用(對x的修改)而言, x = x |= 1
幾乎等於x = x += 1
。 x = x += 1
相當於C中的x = ++x
。該表達式是一個眾所周知的未定義表達式 。
閱讀更多相關信息[這里]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.