写a == 2和2 == a之间的区别

时间:2014-03-24 12:43:11

标签: java c++ c

我心中有一个问题。在很多地方我看到了

int a=2;
if(2==a){
  //Some operation
}

您能告诉我2==a代替a==2进行比较的优势是什么。

2 个答案:

答案 0 :(得分:11)

有些人喜欢这样做,以便在他们意外输入=而不是==时强制显示错误,而不是错误行为。但是:

  • 它只在某些情况下有帮助(当要比较的值之一是可修改的而另一个值不是
  • 时)
  • 如果你犯了那个错误,任何像样的编译器都会发出警告(如果你确实想要分配,请添加括号和/或显式比较)

所以唯一真正的目的是让代码混淆阅读。

更好的习惯可能是声明所有变量const,除非您特别希望它们是可变的。这也可以防止意外分配,同时使代码更容易而不是更难以推理。

答案 1 :(得分:3)

这是在前言/介绍中提到的故事后出名的 这本书专家C编程:深层C秘密作者Peter van der Linden $ 2百万错误与此概念有关。所以这本书的专家

if (i=3)
instead of:
if (i==3)

有些程序员养成了先写文字的习惯,如下所示:if (3 == i)中。然后,如果意外遗漏了等号,编译器会抱怨" 尝试分配到文字。"在比较两个变量时,这不会保护你,但每一点都有帮助。

1993年春天,在SunSoft的操作系统开发小组中,我们有一个优先级"窃听器 报告来描述异步I / O库中的问题。这个错误阻止了这笔交易 价值2000万美元的硬件给那些特别需要库功能的客户,所以 我们非常积极地找到它。经过一些密集的调试会议,问题是 最后追溯到一个声明:

X == 2;

这是打算作为转让声明的错字。程序员的手指有了 反弹"等于"键,意外按两次而不是一次。声明如写 比较x到2,生成true或false,并丢弃结果。