[我以为这本来会被问到,但我找不到答案]。
在撰写if
声明时,我应该将与进行比较的第一个还是第二个? (我对C / C++
和Java
都特别好奇。
这很重要,还是只是风格? (约定似乎是#34;变量第一,价值第二")。
请考虑以下代码:
#include <iostream>
int main() {
int x = 5;
if ( 5 == x ) {
std::cout << "X == 5, true." << std::endl;
}
if ( x == 5 ) {
std::cout << "5 == X, true." << std::endl;
}
return 0;
}
输出:
X == 5,是的 5 == X,是的。
因此 我错过了哪些细微之处?
答案 0 :(得分:10)
这些被称为Yoda Conditions,据我所知,主要思想是防止意外分配(即你不能分配文字)。
是的,值得一提的是像if (a = 5)
这样的a
不是bool
的东西在Java等语言中是不允许的(尽管在C / C ++中很好),但作为维基百科文章指出仍有可能防止不必要的行为:
它还可以解决某些类型的不安全的null行为。
String myString = null;
if (myString.equals("foobar")) { /* ... */ }
// This causes a NullPointerException in Java
Yoda条件:
String myString = null;
if ("foobar".equals(myString)) { /* ... */ }
// This is false, as expected
答案 1 :(得分:5)
将常量放在第一位(又名“Yoda风格”)可以防止出现简单错误的问题:
if (x = 5) // if (x == 5) was intended
...仍然编译但做错了(虽然大多数当前的编译器会警告这个问题)。
if (5 = x) // if (5 == x) was intended
...绝对无法编译甚至接近正常运行的编译器。
答案 2 :(得分:2)
不,没有区别。没关系。做你喜欢的事。就我个人而言:
x == 5
因为它读得更好(或者我认为)。 5 == x
听起来不对劲。但同样,个人意见。
我认为您会发现大多数人都会x == 5
,因为您要比较x
,而不是比较5
。
答案 3 :(得分:1)
两者都可以。 但是当参数在左侧时更容易接受。 例如:
if ( x == 5 )
反正。没关系,做任何你喜欢的事情,感觉更舒服。
答案 4 :(得分:-4)
在大多数情况下,您会发现通常的做法是先将变量放在第一位,因为运算符 == 表示赋值,在这里您要赋值 5 所以将变量放在第一位才有意义。
你的if语句应如下所示:
if ( 5 == x ) {
std::cout << "X == 5, true." << std::endl;
}