2010-06-19 61 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)仍然会是假的。

相关问题