BOOL x = (BOOL)0xF00;
是NO
...值0xF00
不爲0,但仍然結果是NO
但這吹我的範例,布爾應該作爲
NO == 0, YES == any other value
爲什麼這樣?是否表示檢查
if (object) {}
是不是安全?
BOOL x = (BOOL)0xF00;
是NO
...值0xF00
不爲0,但仍然結果是NO
但這吹我的範例,布爾應該作爲
NO == 0, YES == any other value
爲什麼這樣?是否表示檢查
if (object) {}
是不是安全?
BOOL
被定義爲8位的帶符號字符。但是0xF00
需要多於8位。因此,編譯走的是最低的8位,這都爲0的值。當我嘗試它,編譯器特別警告這個問題:
warning: implicit conversion from 'int' to 'BOOL' (aka 'signed char') changes value from 3840 to 0 [-Wconstant-conversion]
如果你打算爲任意值賦值給變量BOOL
,那麼你的範式就需要考慮價值如何表現。
是否表示檢查'if(object){}'不安全? –
如果你的意思是檢查'object'是否爲零,這是安全的,因爲'if'檢查的工作方式不同。儘管寫'if(object!= nil){}'仍然更清晰。 –
以什麼方式,'if'的工作方式不同? –
投射到一個字節值截斷所有較高位......你可以做到這一點,但...
BOOL boolyValue = !!0xffff00;
'_Bool'這樣工作,但'BOOL'沒有。 –
另請參閱:[「BOOL的尖角」在BNR博客上](https://www.bignerdranch.com/blog/bools-sharp-corners/) –
此致,爲什麼蘋果三年前在iOS中修復了這個問題,但仍然沒有在MacOS中沒有做到這一點?這對我沒有意義。 – vitormm