“如果”声明,不断平等

时间:2011-12-21 03:48:56

标签: java c++ if-statement

  

可能重复:
  Order of condition checking?

当我读取一些源代码时,if语句以这种方式编码,

if (1 == a) {
   ...
}

而不是

if (a == 1){
    ...
}

我读了一本关于这种方式优势的编程书,但是不记得究竟是什么。谁知道这件事?

(对不起,如果这个问题扰乱了你:-))

3 个答案:

答案 0 :(得分:3)

优点是编译器会马上告诉你错误。例如,a = 1将编译,但会在运行时产生错误,而1 = a将在编译时产生错误,因为1不是有效的左值。

示例:这会立即产生错误:

       int a = 0;
       if(1 = a) {
        print("test");
       }

虽然这将编译(可能会根据编译器产生警告),但它会在运行时导致问题。

       int a = 0;
       if(a = 1) {
           print("test");
       }

这里的主要想法是确保您在条件中使用==而不是=

据说每个现代编译器(即Eclipse)都会将上述内容视为错误。所以它不像以前那样在记事本和vi时代(在我看来)。我个人更喜欢a == 1,因为这对我来说更具可读性。

答案 1 :(得分:1)

在经典C中,条件是一个整数表达式,它很容易编写

if (a = 1)

错误。问题是如果你这样做,编译器就不会抱怨,因为赋值也会计算为整数。向后编写表达式使得如果你犯这个错字,代码将无法编译。在C中执行此操作并不是一个坏主意;它在其他语言中的意义不大。

答案 2 :(得分:0)

如果遗漏=1 = a是编译错误,而a = 1则是一个微妙的错误。