【问题标题】:Is there a difference between i==0 and 0==i?i==0 和 0==i 有区别吗?
【发布时间】:2012-05-26 06:02:25
【问题描述】:

第一个代码:

  if(i==0) {// do instructions here}

第二个代码:

  if(0==i) { // do instructions here }

块之间有什么区别?

【问题讨论】:

  • 不会让您花时间调试,因为您忘记了=
  • 如果您使用 c#,至少可以避免 if (i=0) {} 问题,因为该语法是非法的。
  • @KendallFrey 它是 C++ 中的有效表达式,因此编译器没有什么可以捕捉的。
  • 然而,@Juan,一些 C++ 编译器还是抓住了它。这是一个实施质量问题。
  • 如果您重载了 == 运算符(并非在所有列出的语言中都可行),您可以使 A == B 与 B == A 不同(不是您应该,而是你可以)。

标签: c# php c++ c


【解决方案1】:

在功能上没有区别。
一些开发人员更喜欢编写第二种格式以避免赋值错误(以防您错过=),以便编译器警告错误。
第二个是著名的 Yoda Condition

我说没有区别,因为你不能防范每一个微小的细节,而是依靠编译器为你大声喊叫。如果你打算写一个==,你应该期望自己写一个==和不是=
使用第二种格式只会导致一些晦涩难懂的代码。
此外,一旦您启用所有警告(您应该反正)。

【讨论】:

  • 可惜他们没有对jargon question进行历史锁定
  • +1 用于尤达条件和口袋妖怪异常处理。以前从未听说过这些术语。
  • @ConradFrix:他们不仅锁定了它,它已被删除,现在只有 10k+ 用户可以看到它。
  • @JohnDibling 这有点像我的观点我不介意看到这个问题通过historical lock 复活了
  • 确实,它是历史锁定的主要候选者。删除它是不恰当的,并且没有任何价值。
【解决方案2】:

对于 C++,虽然不太可能,但可能会有所不同。这取决于我的类型。例如

struct Foo
{
    int x;
};

bool operator==(Foo lhs, int rhs)
{
    return lhs.x == rhs;
}

bool operator==(int lhs, Foo rhs)
{
    std::cout << "Hi!";
    return true;
}

这样写代码的人当然应该被枪毙。

【讨论】:

    【解决方案3】:

    是的,就 C# 而言,它们是相同的。 对于更复杂的情况,请访问A==B vs B==A, What are the differences

    【讨论】:

      【解决方案4】:

      在功能上,它们在 C 中是相同的;我不确定其他语言是否会出现诸如运算符重载之类的丑陋事物。

      从风格上讲,后者非常违反直觉,我个人觉得它非常难看。关键是当你不小心写了= 而不是== 时,让编译器抛出一个错误,但是好的编译器可以选择警告你,所以这是不必要的。

      【讨论】:

      • 运算符重载很漂亮! (如果应用得当。)这是我对 C++ 的喜爱之一,一次又一次。
      【解决方案5】:

      没有区别,有些人更喜欢第二个来捕捉常见的错误 分配(=)而不是相等测试(==

      0 = i 在编译时会失败

      【讨论】:

        【解决方案6】:

        当你写 (0==i) 时,如果 (i = 0) 错误地使用单等号的错误(例如)被消除了。没有别的了。

        【讨论】:

          【解决方案7】:

          在 C# 中没有区别。然而,在 C++ 中,性能存在差异,这就是为什么你现在看到两者都在 C# 代码中使用 - 实际上我正在考虑 i++ 与 ++i 关于性能 - 0 == i 是 C/C++ 中的常见编码建议避免 i = 0 作为意外操作

          【讨论】:

            【解决方案8】:

            第二个版本应该更安全。

            如果您忘记了一个等号,它不会将 i 的值更改为零。

            【讨论】:

              猜你喜欢
              • 2020-11-09
              • 2016-05-13
              • 1970-01-01
              • 2019-06-25
              • 2023-03-29
              • 1970-01-01
              • 2022-01-07
              • 2022-11-30
              • 2017-06-19
              相关资源
              最近更新 更多