2013-06-26 47 views
0

也許愚蠢的問題:目標C - BOOL投零或NO

NSString *var = @"test"; 
if (var) { 

這裏var被強制轉換爲BOOL和比較YES,不是嗎?

當鑄造到BOOLnilNO有任何其他值可以轉換爲NO嗎?

+1

所有類C比較提升爲'_Bool'(int),而不是'BOOL'(signed/unsigned char) – CodaFi

+2

@CodaFi不,它們不是。促銷到'int'發生。 – 2013-06-26 09:08:44

回答

2

這裏var被鑄造爲BOOL並且與YES相比,是不是?

不,它不是,爲什麼呢?

有沒有其他值可以被轉換爲NO時,BOOL比被轉換爲零和NO?

值爲零的任何整數表達式都可以完成這項工作。

+1

僅供參考:如果表達式自動評估爲BOOL,那麼對signed指針進行的切片將對指針進行切片將是一場災難。 – CodaFi

+0

@CodaFi幾乎是的。 '0xf00bar00',而非''NULL'突然變得錯誤,因爲對齊。 – 2013-06-26 09:15:23

+2

爲了強調一點,'NO'只是一個0的形式,可能值得回憶BOOL是如何定義的:'typedef signed char BOOL;'''#define YES((BOOL)1)'' #define NO((BOOL)0)'。 –