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作为意外操作