「if(systemReady == false)return」的區別是什麼?和「if(!systemReady)return」在CPU
if(systemReady == false)return;
and
if(!systemReady)return;
in cpu?
「if(systemReady == false)return」的區別是什麼?和「if(!systemReady)return」在CPU
if(systemReady == false)return;
and
if(!systemReady)return;
in cpu?
爲什麼不用調試器檢查它?好的,沒有理由這樣做。而且,說實話,沒有什麼理由來回答你的問題:然而,...
表達!expr
將編譯到這樣的事情:(取決於CPU)
Load expr
Complement
Branch if zero
表達expr==false
會編譯頂部是這樣的:
Load expr
(Compare with #0)
Branch if (not) zero
如果在執行時間差,編譯器會自動選擇了一個更快的,如果你設置的優化級別的東西比沒有優化高。
所以根本就不在乎這個。選擇這個選項,你認爲閱讀更好。
非常感謝! –
對於任何中途正常的編譯器,這些語句將編譯爲等效的機器代碼。即使他們不這樣做,但這種差異會非常微小,以至於你必須瘋狂才能照顧。不要過早地優化。此外,算法的選擇幾乎總是將實施細節放大幾個數量級來確定性能。
最後,你永遠不應該與之比較的true
,false
,YES
,NO
等因爲有這不等於true
真值這是危險的。任何非零值都是正確的。
這也是不好的風格。 systemReady
(顯然)已經是一個布爾值。沒有必要將它與任何東西進行比較,以使其成爲布爾值。
問問你自己,你會不會寫:
if ((systemReady == false) == true) return;
或者:
if (((systemReady == false) == true) == true) return;
?
如果不是,那麼你應該明白爲什麼寫if (systemReady == false) ...
也是錯誤的。同樣無故添加冗餘比較。
因此,使用你的第二種形式:if (!systemReady) ...
。
'expr == true'是多餘的(對於布爾型expr),'expo == false'不是多餘的,因爲'!expr'不是多餘的。而且,與布爾值比較沒有什麼問題,因爲整數比較整型文本沒有什麼問題。 –
非常感謝! –
我會以不同的方式標記,但我不確定標記的內容。 – Arc676
大多數編程語言(如果objective-c是一個例外,我會感到驚訝)是根據抽象語義定義的。也就是說,規範說明了應該發生什麼,現在應該怎麼發生。很可能有幾種有效的方法來編譯這兩個代碼片段(特別是當您考慮多個不同的體系結構時),所以無法分辨cpu級別的差異。如果我被迫猜測,我會說生成的機器碼相當於這兩者。 – aioobe