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

可能重复:
A == B对B == A,有什么区别

第一个代码:

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

第二个代码:

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

块之间有什么区别?

在function上,没有区别。
有些开发人员更喜欢编写第二种格式以避免指定拼写错误(如果您错过了a = ),以便编译器警告拼写错误。
第二个被称为尤达条件

尤达条件

我说没有什么区别,因为你无法保护自己免受每一个微小的细节,并依靠编译器为你大声喊叫。如果你打算写一个==你应该期望自己写一个==而不是a =
使用第二种格式只会导致一些模糊的不可读代码。
而且,大多数主stream编译器都会在您启用所有警告(您应该使用这些警告)后通过发出警告来警告分配,而不是平等错字。

第二个版本应该是更安全的。

万一你忘记了一个等号,它不会把我的值改为零。

在function上,它们在C中是相同的; 我不确定其他语言,比如操作符重载等丑陋的东西。

在风格上,后者是非常直观的,我个人觉得它非常难看。 关键是要让编译器在你不小心写=而不是==时候抛出一个错误,但好的编译器有一个选项可以提醒你这个问题,所以没有必要。

是的,他们和C#一样。 对于更复杂的情况,请访问A == B对B == A,有什么区别

对于C ++来说,虽然不太可能,但是可能会有所不同。 这取决于我的types是什么。 例如

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

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

当你写(0 == i)时,如果(i = 0)被消除,使用单等于错误符号的错误(eg)。 没有其他的。

没有什么区别,有些人更喜欢第二个抓取做分配( = )而不是平等testing( == )的常见错误,

0 = i会编译失败

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