2010-06-19 38 views
1

我一直在編寫iPhone SDK大約6個月,但對於幾件事情有點困惑......其中之一在這裏問:iPhone SDK:請解釋爲什麼「nil ==」與「== nil」不同

爲什麼以下考慮不同?

if (varOrObject == nil) 
{ 

} 

VS

if (nil == varOrObject) 
{ 

} 

從一個Perl的背景,這是混淆我來了...

是否有人可以解釋爲什麼這兩個(第二)之一將是真實的,而如果兩個例程在代碼中一個接一個地放置,那麼首先不會。 varOrObject在兩個if語句之間不會發生變化。

這裏沒有具體的代碼,只是我在很多地方看過這兩個語句是不同的,但不是爲什麼。

在此先感謝。

+1

[==操作符和操作數(可能重複http://stackoverflow.com/問題/ 677264 /運算符和操作數) – ChrisF 2010-06-19 17:28:57

+0

參見http://stackoverflow.com/questions/797162/is-there-any-difference-between-ifa5-or-if5a-in-c更多解釋 – ChrisF 2010-06-19 17:29:35

+0

「考慮不同「?是什麼讓你認爲它們被認爲是不同的? – AnT 2010-06-19 18:06:55

回答

9

它們是相同的。什麼您已經閱讀可能是在談論,如果你誤寫===,前者將賦值給變量和if條件將是錯誤的,而後者則是一個編譯時錯誤:

if (variable = nil) // assigns nil to variable, not an error. 

if (nil = variable) // compile time error 

後者給你在編譯時糾正錯誤的機會。

+1

GCC 4.2在編譯時捕獲了這個h警告。 – kubi 2010-06-19 17:54:01

2

它們完全一樣,它只是一種風格差異。如果另一個是錯誤的,則永遠不會是真的。

0

如果建議您使用後者,那是因爲如果您不小心鍵入了=,則更容易捕獲。否則,它們是相同的,你的書是錯誤的。

4

如果您使用Objective-C++並且您重寫了對象的'=='運算符,它們可能會有所不同。

0

只有當「==」 - 運算符超載時,它們纔會有所不同。 假設某人爲列表重新定義了「==」,以便檢查兩個列表的內容而不是內存地址(例如Java中的「equals()」)現在,同一個人理論上可以定義「emptyList == NULL 」

現在(的emptyList == NULL)將是真實的,但(NULL ==的emptyList)仍然會是假的。

相關問題