使用 if(0 == foo()) 而不是 (foo() == 0) 有什么好处?
What's the advantage of using if(0 == foo()) rather than (foo() == 0)?
我发现一些程序员喜欢在比较器操作符中这样编码。
if (0 == foo()){
....
}
与foo() == 0
在可读性方面有什么不同吗?使用0 ==foo()的优势是什么?
在这种情况下没有区别,但是在比较字符串时,最好先使用字符串常量,以避免空指针异常。
。
if ("somestring".equals(someVarString)) {
// doSomething
}
所以someVarString可以为空,测试仍然有效。然而,如果你把测试翻转到:
if (someVarString.equals("somestring")) {
// doSomething
}
如果someevarstring为空,将导致NPE
不,我认为这样做的最好理由是:
0 == foo
是确保你没有忘记一个=
它会使
if (0 = foo)
通常会引发编译错误,而不是
if (foo = 0)
会产生一个难以发现的bug。
这种风格的优点是,在所有情况下,如果您键入=
而不是==
,编译器肯定会报错,因为您不能为数字赋值。
bool a = 1;
if (0 = a)
{ }
else if( 1 = a )
{ }
将无法编译,而
bool a = 1;
if (a = 0 )
{ }
else if( a = 1 )
{ }
不是非法的(它可能会产生编译器警告)
这就是说,我同意它看起来很丑,而且通常是反过来的。
没有性能影响,人们这样做的原因是确保他们不会不小心键入=操作符而不是==比较操作符(因为编译器会抱怨你不能给常量赋值)。
我发现可读性的损失比我喜欢的要大,所以我没有这样做。其他人显然已经习惯了。
就性能而言,没有。
可读性是主观的;我个人觉得0 == foo()
比foo() == 0
读起来稍微别扭一些。
我看到的唯一支持if (0 == var)
的论点是,如果你不小心把这个错误地输入为if (0 = var)
,编译器会报错。然而,大多数现代编译器在看到if (var = 0)
时会发出警告,使该参数无效。此外,这种思路甚至不适用于您的情况,因为if (foo() = 0)
不是有效代码。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 什么时候在C++中返回常量引用是个好主意
- 两种初始化有什么区别:Foo f();Foo f = Foo()
- int* foo(int a)在C 中返回什么
- 在构造函数 foo() 中有一个模板是什么意思 <T>C++?
- "int& foo()"在C++中是什么意思?
- &foo::function 和 foo::function 有什么区别?
- FOO.tab.cpp较大项目的文件夹FOO部分中的文件.*.tab.cpp有什么特殊意义吗?
- 我的$Foo ATL解决方案中的($Foo)PS项目用于什么
- 用空括号定义会发生什么?例:#define FOO()
- auto foo = ref new Foo();什么是"ref"?
- "模板<class>好友类 Foo"是什么意思?
- 使用 if(0 == foo()) 而不是 (foo() == 0) 有什么好处?
- 在C++中,foo::bar::baz()的含义是什么
- c++,尾随逗号怎么不是错误,会发生什么?Foo x,y,;