使用if(0 == foo())而不是(foo()== 0)有什么好处?

Kit*_* Ho 1 c++ java coding-style

我发现一些程序员想在比较器运算符中这样编码.我发现阅读起来比较困难......

if (0 == foo()){
    ....
}
Run Code Online (Sandbox Code Playgroud)

foo() == 0在可读性方面有什么不同吗?使用0 == foo()有什么好处?

Mat*_*ier 6

在这种情况下没有区别,但在比较字符串时,最好首先使用字符串常量来避免空指针异常.

if ("somestring".equals(someVarString)) {
// doSomething
}
Run Code Online (Sandbox Code Playgroud)

所以someVarString可以为null,测试仍然有效.如果你将测试翻到:

if (someVarString.equals("somestring")) {
// doSomething
}
Run Code Online (Sandbox Code Playgroud)

如果someVarString为null,它将导致NPE.


cel*_*tex 5

不,我认为这样做的最好理由是:

0 == foo
Run Code Online (Sandbox Code Playgroud)

是为了确保您不会忘记=能够做到的一个

if (0 = foo)
Run Code Online (Sandbox Code Playgroud)

通常会引发编译器错误,而不是

if (foo = 0)
Run Code Online (Sandbox Code Playgroud)

这会导致难以发现的错误。

  • 而且几乎每个C ++编译器都会对此发出警告。当我编写类似“ if(foo = 0)”的内容时,我在Visual C ++中得到“警告C4706:条件表达式内的赋值”。而且我将编译器设置为将警告变为错误,因此实际上我对此并不感到厌烦。 (7认同)