0

可能重复:
如何检查是否相等?(0 == i) 或 (i == 0)
i==0 和 0==i 有区别吗?

我多次看到人们使用if(condition)asif(0==x)而不是if(x==0). 据说这是一个很好的做法,但有人可以解释为什么会这样吗?它有什么区别?相反,它降低了我认为的可读性。

4

5 回答 5

10

它降低可读性的事实纯粹是主观的。(虽然我也有同样的感觉,但那是因为我一直在处理x==0比其他方式更多的事情,所以我已经习惯了)。

这样做是为了防止意外分配:

if(0=x)

将产生编译器错误,

if(x=0)

惯于。

于 2012-09-24T09:03:57.880 回答
2

就个人而言,我不喜欢这种做法。但它变得流行是因为以下原因:

区分assignment operator和布尔条件。

if(x = 0)

这条线有两个目的:

  1. 将 0 分配给 x。
  2. 使条件false导致它等同于if(0)

为了避免这些错误,有些人更喜欢if(0 = x)这会导致编译时错误。

于 2012-09-24T09:07:20.577 回答
1

它只是避免了键入错误,您将键入if (a = 0)而不是if (a == 0). 如果使用 Yoda 样式if (0 = a)而不是if (0 == a).

另一方面,它并不能防止if (b = a)b是另一个变量的情况。没有银弹。

更好的是-Wall -Wextra在编译时使用。添加-Werror如果您想偏执并将所有警告视为错误(最好这样做)

于 2012-09-24T09:06:39.097 回答
0

是的,它的可读性较差(恕我直言),但这可以避免使用分配而不是检查其常见错误==

if( 0 = variable ) { // Fail 0 is constant

有趣的事实:有人称之为“尤达条件”

于 2012-09-24T09:05:02.420 回答
0

不,这只是你的习惯,比如左边的变量名和右边的常量。但实际上它会给你确切的代码,如果你离开

如果 (0=x)

代替

if(0==x) 错误然后它会给你一个错误,你可以很容易地修改它但是如果在相反的情况下它很难调试

于 2012-09-24T09:06:03.440 回答