3

[我以为这已经被问过了,但我找不到答案]。

if陈述时,我要比较的东西应该在第一位还是第二位?(我对C / C++和都特别好奇Java)。

重要吗,还是只是风格?(约定似乎是“变量第一,价值第二”)。

考虑以下代码:

#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,是的。

所以似乎没有任何区别。有没有我错过的微妙之处?

4

5 回答 5

10

这些被称为尤达条件,据我所知,主要思想是防止意外分配(即您不能分配给文字)。

是的,值得一提的是,在诸如 Java 之类的语言中不允许使用if (a = 5)where ais not a之类的东西bool(尽管在 C/C++ 中可以),但正如 Wikipedia 文章指出的那样,仍然可以防止不需要的行为:

它还可以解决某些类型的不安全 null 行为。

String myString = null;
if (myString.equals("foobar")) { /* ... */ }
// This causes a NullPointerException in Java

使用尤达条件:

String myString = null;
if ("foobar".equals(myString)) { /* ... */ }
// This is false, as expected
于 2013-07-12T01:12:28.127 回答
5

将常量放在首位(又名“尤达风格”)可以防止出现简单错字的问题:

if (x = 5) // if (x == 5) was intended

...仍然编译但做错了(尽管大多数当前的编译器都会警告这个问题)。

if (5 = x) // if (5 == x) was intended

...即使接近正常运行的编译器,也绝对无法编译任何东西。

于 2013-07-12T01:12:25.237 回答
2

不,没有区别。没关系。做任何你喜欢的事。我个人会这样做:

x == 5

因为它读起来更好(或者我认为)。5 == x只是听起来不对。但再说一次,个人意见。

我想你会发现大多数人这样做x == 5是因为你在比较x,而不是比较5

于 2013-07-12T01:11:29.980 回答
1

两者都可以。但是当参数位于左侧时,这样做更容易接受。例子:

if ( x == 5 )

反正。没关系,随心所欲,感觉更舒服。

于 2013-07-12T01:11:37.433 回答
-4

在大多数情况下,您会发现通常的做法是将变量放在第一位,因为运算符==表示赋值,而在这里您分配的值为5,因此只有将变量放在首位才有意义。

您的 if 语句应如下所示:

    if ( 5 == x ) {
        std::cout << "X == 5, true." << std::endl;
    }
于 2013-07-12T01:54:19.190 回答