8

第一个代码:

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

第二个代码:

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

块之间有什么区别?

4

8 回答 8

31

从功能上讲,没有区别。
一些开发人员更喜欢编写第二种格式以避免分配拼写错误(以防您错过 a =),以便编译器警告拼写错误。
第二个是著名的尤达条件

尤达条件

我说没有区别,因为你不能防范每一个微小的细节,而是依靠编译器为你大声喊叫。如果你打算写 a==你应该期望自己写 a==而不是 a =
使用第二种格式只会导致一些晦涩难懂的代码。
此外,大多数主流编译器都会在启用所有警告后发出警告,而不是相等错字来警告分配(无论如何您都应该这样

于 2012-05-18T16:34:44.480 回答
7

第二个版本应该更安全。

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

于 2012-05-18T16:34:38.070 回答
5

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

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

于 2012-05-18T16:35:46.727 回答
3

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

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

于 2012-05-18T16:49:41.260 回答
2

是的,就 C# 而言,它们是相同的。对于更复杂的情况,请访问A==B vs B==A,有什么区别

于 2012-05-18T16:35:48.060 回答
1

当您编写 (0==i) 时,如果 (i = 0) 错误地使用单等号(例如 ),则消除了错误。没有其他的。

于 2012-05-18T16:34:55.670 回答
1

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

0 = i编译失败

于 2012-05-18T16:34:56.470 回答
0

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

于 2012-05-18T16:34:47.867 回答