可能重复:
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)
{
}
是否仅考虑格式化目的或背后是否有任何原因?
答案 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)
这是因为常见的拼写错误是输入=
而不是==
。