我今天碰到了一些代碼,它檢查了一些錯誤條件。一直使用一個布爾值,但不是每次用=
重新分配它,而是重新分配&=
,導致布爾值和新值的先前值的位邏輯與。代碼看起來像這樣:是否有理由在布爾值上使用&=而不是= =?
bool result = FirstCheck();
Assert(result);
result &= SecondCheck();
Assert(result);
...
現在我很好奇爲什麼有人會這樣做?這是邏輯上等同於剛剛重新分配布爾值如由下面的可能的分支:
- FirstCheck失敗(返回false)和斷言程序失敗,並且永遠不會使得它SecondCheck
- FirstCheck傳遞(返回真正的),程序使它成爲SecondCheck。如果SecondCheck返回true,則結果爲true,因爲true & true = true。如果SecondCheck返回false,則結果爲false,因爲true & false = false。
由於沒有邏輯差異,是否還有其他一些原因&=
可能更可取?還是更可能是一些舊代碼的遺留物,它們從來沒有改變過?
編輯: 爲了澄清,Assert始終是活動代碼。我在調查一個錯誤時偶然發現了這段代碼,因爲斷言失敗了。
是否在某些位運算符比邏輯一快的情況下? – GBleaney
這*不*執行按位與。當在C#中調用布爾值時,'&'操作符只會執行非短路AND操作。所以它永遠不會更快,它可能會更慢。只有在不考慮result的值的情況下執行'SecondCheck'的副作用是非常重要的。要麼,要麼只是一個錯誤。 – Servy