可能重复:
What is the difference between these (bCondition == NULL) and (NULL==bCondition)?
我正在阅读一段C ++代码,并遇到了像
这样的代码if (NULL != threadInfo)
{
...
...
}
我只是想知道使用表达式
之间有什么区别if (threadInfo != NULL)
{
...
...
}
上面说的是什么。 读取第一个时读取“如果NULL不等于ThreadInfo”,第二个读取“If threadInfo不等于NULL”。对我来说,第二个更有意义。
答案 0 :(得分:14)
不,没有区别。如果是==
,可能会有一些差异。问题是如果你不小心写=
而不是==
,编译器会在第一种情况下给出错误。
if (threadInfo = NULL) //always false. The compiler will give you a warning at best
if (NULL = threadInfo) //Compiler error
我个人讨厌这种做法,并认为编写可以用普通人类语言而不是Yoda语言阅读的代码会更好。
答案 1 :(得分:7)
这是为了安全,所以你不小心写
threadInfo = NULL
而不是
threadInfo == NULL
对于!=没有必要这样做,但它是一致的。
答案 2 :(得分:4)
如果threadInfo
属于覆盖operator !=
的类型,并且该类的所有者未提供对称的自由函数来处理交换两个参数的情况,则可能存在差异(可能还需要解雇该程序员)。
否则,这是一个品味问题。编写if(42 == answer)
而不是if(answer == 42)
的人可能更喜欢它 - 这可以保护您免于错误输入赋值运算符而不是等号检查。但是,既然现代编译器会在你这样做时警告你,那么这种方法是否能提供任何东西都是值得商榷的。
答案 3 :(得分:2)
没有区别。写NULL != ...
的重点是,如果您改写拼写错误并编写NULL = ...
,则代码将无法编译。如果你有... = NULL
它可能是一个有效的赋值,错误可能会被忽视(但大多数编译器检测到这一点并警告你)。有人试过insert a backdoor into the Linux kernel using this technique。
另请注意,大多数人都不会这样编码。
答案 4 :(得分:2)
没有区别,除了第一个选项不能错误输入:
if (threadInfo = NULL)
{
...
...
}
有些人不知道如何使用编译器开关检查这个(有些编译器没有它们)。
答案 5 :(得分:1)
答案 6 :(得分:0)
这通常用作约定,并且本身没有明确的含义。
因为赋值发生在lvals中,并且NULL是不可分配的,所以当您指出threadInfo = NULL
或threadInfo == NULL
错误时,这可以防止可怕的threadInfo != NULL
。
有关详细信息,请参阅this wikipedia article section on left-hand comparisons
答案 7 :(得分:0)
两者都做同样的事情。这是一种用于避免输入错误的样式约定:
if (value=NULL) // assignment instead of == operator
{
}
答案 8 :(得分:0)
就逻辑而言,这些是完全相同的。
第二个是更直观的,当人们看到第一个被认为更安全,因为它不允许错误地写(threadInfo = NULL)
,导致错误。
答案 9 :(得分:0)
Null是内存中的引用,只包含没有地址可以访问它。
通过这种方式,您可以在null后面进行比较,以检查某个对象是否具有值或什么都没有。
答案 10 :(得分:0)
我认为没有任何区别。但是,如果您忘记输入第二个NULL == someVar
,编写NULL = someVar
的做法可以避免您编写=
。