在C++中检查相等性的两种方式的差异是i == 0 vs 0 == i

Son*_*hra 4 c++

我正在使用C++中的庞大代码库.作者使用0==i语法来检查相等性.我已经用C++编写了很多年了; 我一直使用i==0语法.

前者比后者有什么优势吗?或者只是个人偏好?

Lig*_*ica 11

0==i被称为"尤达条件".这当然是个人偏好,但确实有优势.

在黑暗时代,它被神秘的骑士使用,他们缺乏现代技术,在他们0=i错误地写作时告诉他们.

编译器将拒绝意外0=i,但它会接受意外i=0.

这个惯例在1672年战争结束后被逐步淘汰.当代巫师试图编写对其他巫师(也是精灵,精灵和人类)有意义的代码,而是使用在这个千年(也是他们的眼睛)中编写的编译器来避免这样的错误.

  • 公牛!伟大,伟大,伟大的阿姨阿姨最近在19世纪50年代使用它! (2认同)
  • @SonuMishra有时你必须将警告级别调高才能得到它,但它通常存在. (2认同)
  • @SonuMishra:这就是_eyes_进来的地方!我明白为什么人们会使用它,但我相信它会让人陷入虚假的安全感,我相信如果你没有足够的注意力去发现```vs` ==`,那你还有什么呢?失踪?更加注意.只需阅读您的代码.:)并让你的同事进行代码审查.**tl; dr如果你错过了这个,你几乎肯定会错过yoda条件为你解决的其他事情.修复自己** (2认同)

md5*_*d5i 10

前者的优点是它可以防止程序员意外地遗漏等号.

if (i = 0)
Run Code Online (Sandbox Code Playgroud)

以上是合法的,并设置i为零,并且为假(因为零被认为是假的).

if (0 = i)
Run Code Online (Sandbox Code Playgroud)

以上情况在所有情况下都是非法的.

今天,大多数编译器都会发出警告if (i = 0),但这不是必需的,并且他们并不总是如此.