为什么if(constant == variable)是首选而不是if(variable == constant)

时间:2011-12-21 14:14:22

标签: c++ c

  

可能重复:
  How to check for equals? (0 == i) or (i == 0)
  Why does one often see “null != variable” instead of “variable != null” in C#?
  Why do some experienced programmers write expressions this way?
  What is the meaning of NULL != value in C++?

例如,

 int k =5;
 if( 5 == k )
 {
 } 

优先于

if (k == 5)
 {
 }

是否仅考虑格式化目的或背后是否有任何原因?

6 个答案:

答案 0 :(得分:14)

因为这种形式使得通过忘记其中一个等号来引入错误变得更加困难。想象一下,如果你这样做:

if (k = 5)

这是作为比较,但它现在是一个任务!更糟糕的是,它是 legal ,它会以多种方式搞乱你的程序(k的值被更改,条件总是计算为true)。< / p>

将此与

对比
if (5 = k)

这不合法(您不能分配给文字),因此编译器会立即将其标记为错误。

也就是说,这种编写代码的方式(条件中的赋值)在今天并不像以前那样流行。大多数现代编译器会将此标记为警告,因此不太可能未被发现。我个人不喜欢第二种形式,因为编译器可以帮助我不使用它。

答案 1 :(得分:6)

如果您输入错误并写

if (k = 5) // instead of ==
那么你可能刚刚介绍了一个很难找到的bug。 (实际上,以前很难找到。现在,大多数编译器会将此标记为警告。)

然而,这将导致编译时错误

if (5 = k)
顺便说一句,这种风格叫做尤达条件: - )

答案 2 :(得分:3)

这是为了避免

的错误
if( k = 5 ) {

}

总是等于真。

答案 3 :(得分:1)

一个。谁说这是首选?!

我能想到的唯一原因是要避免:

 int k =5;
 if( 5 = k )//notice one "="
 {

 } 
像这样你将得到一个编译错误,而另一种方式将起作用。但我认为它的可读性较差,不太受欢迎。

答案 4 :(得分:1)

首先,大多数人更喜欢第二种形式,因为它感觉“更自然”;第一种形式被认为是“逆转”,实际上通常被称为“尤达条件”。

使用第一种表单的理由是避免在错误地键入=而不是==时意外分配。因为在条件中你可以写任何表达式,所以允许=,所以如果错误输入指令

if(k = 5)
{

}

不会检查k是否等于5,但会将5分配给k,因为=会返回对其左侧的引用手动操作符,条件将被评估为真,if主体将始终执行。

另一方面,如果您在Yoda条件中输入=而不是==,那么

if(5 = k)
{

}

导致编译错误,因为您无法将任何内容分配给文字(5)。

虽然它们看起来是个好主意,但是“Yoda条件”看起来很奇怪,最重要的是,几乎所有打开警告的好编译器都会警告你,如果你在条件表达式中写一个赋值,那么大多数人只需使用“自然的外观”形式。

答案 5 :(得分:0)

这是因为常见的拼写错误是输入=而不是==