【问题标题】:"If" statement, constant equality [duplicate]“如果”语句,常量相等[重复]
【发布时间】:2011-12-21 03:48:55
【问题描述】:

可能重复:
Order of condition checking?

我看一些源码的时候,if语句是这样编码的,

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

而不是

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

我读过一本关于这种方式的优点的编程书,但不记得它到底是关于什么的。有人知道吗?

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

【问题讨论】:

标签: java c++ if-statement


【解决方案1】:

优点是编译器会立即告诉您该错误。例如,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,因为这对我来说似乎更具可读性。

【讨论】:

  • @John - 不是,除非 1 被定义为变量。阅读我的帖子。
  • a=1 至少会给你一个很大的警告:)
  • @Vlad - 是的,取决于编译器...旧的 gcc 编译器在过去甚至没有警告过。在 vi 中被胖指法打败了很多:P
  • 不,我刚试过,它有效,我一直认为你做不到,吸取教训
  • @John - 很酷,感谢您收回反对票 :)
【解决方案2】:

在经典的 C 语言中,条件是一个整数表达式,写起来很容易

if (a = 1)

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 2019-11-15
      • 2012-12-04
      • 1970-01-01
      • 2015-12-18
      • 2017-07-04
      • 2015-05-17
      相关资源
      最近更新 更多