可能重复:
How to check for equals? (0 == i) or (i == 0)
Is there a difference between i==0 and 0==i?
我见过很多次人们使用if(condition)
作为if(0==x)
代替if(x==0)
。它被认为是一种很好的做法,但有人可以解释为什么这样做?它有什么不同?相反,它在我看来降低了可读性。
答案 0 :(得分:10)
它降低可读性的事实纯粹是主观的。 (我也有同样的感觉,但那是因为我一直在处理x==0
而不是相反,所以我习惯了。)
这样做是为了防止意外分配:
if(0=x)
将产生编译器错误,
if(x=0)
不会。
答案 1 :(得分:2)
就个人而言,我不喜欢这种做法。但由于以下原因,它变得很受欢迎:
区分assignment operator
和布尔条件。
if(x = 0)
这条线有两个purpsose:
false
,因为它等同于if(0)
为了避免这些错误,有些人更喜欢if(0 = x)
,这会导致编译时错误。
答案 2 :(得分:1)
只需输入if (a = 0)
而不是if (a == 0)
,就可以避免输入错误。如果您使用if (0 = a)
而不是if (0 == a)
,则使用Yoda样式会出现编译错误。
另一方面,它不会阻止if (b = a)
和b
是另一个变量的情况。没有银弹。
最好在编译时使用-Wall -Wextra
。如果您想要偏执,请添加-Werror
并将所有警告视为错误(最好这样做)
答案 3 :(得分:0)
是的,它的可读性较低(imho),但这可以避免使用assign而不是检查==
if( 0 = variable ) { // Fail 0 is constant
有趣的事实:有人称之为“尤达条件”
答案 4 :(得分:0)
不,只是习惯于读取左边的变量名和右边的常量。 但实际上它会给你确切的代码,如果你离开
if(0 = x)
而不是
如果(0 == x)的 如果错误,那么它会抛出一个你可以轻易修改的错误,但如果反过来又很难调试