i == 0和0 == i之间有区别吗?

时间:2012-05-18 16:32:37

标签: c# php c++ c

第一个代码:

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

第二段代码:

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

块之间有什么区别?

8 个答案:

答案 0 :(得分:29)

功能上,没有区别 一些开发人员更喜欢编写第二种格式以避免分配拼写错误(如果你错过了=),编译器会警告错误。
第二种是着名的 Yoda Condition

Yoda Condition

我说没有区别因为,你无法防范每一个微不足道的细节,依靠编译器为你大声喊叫。如果你打算写一个==,你应该期望自己写一个{{ 1}}而不是==  使用第二种格式只会导致一些模糊的不可读代码 此外,大多数主流编译器在启用所有警告后( emitting an warning 警告赋值而不是相等拼写错误你应该反正)。

答案 1 :(得分:7)

第二个版本应该更安全。

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

答案 2 :(得分:5)

在功能上,它们在C中是相同的;我不确定运算符重载等丑陋的东西会发挥作用的其他语言。

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

答案 3 :(得分:2)

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

答案 4 :(得分:2)

对于C ++,虽然不太可能,但可能存在差异。这取决于我的类型。 e.g。

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;
}

编写类似代码的人当然应该被拍摄。

答案 5 :(得分:1)

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

答案 6 :(得分:1)

没有区别,有些人更喜欢第二个人抓住常见的错误 赋值(=)而不是相等测试(==

0 = i在编译时会失败

答案 7 :(得分:0)

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