Вопрос по php, c#, c++, c – Есть ли разница между i == 0 и 0 == i?

8

Первый код:

  if(i==0) {// do instructions here}

Второй код:

  if(0==i) { // do instructions here }

В чем разница между блоками?

И все же, @Juan, некоторые компиляторы C ++ все равно его ловят. Это проблема качества реализации. Rob Kennedy
@KendallFrey - это допустимое выражение в C ++, поэтому компилятору нечего ловить. juanchopanza
Одна из них не заставит вас тратить время на отладку, потому что вы забыли=. alex
... в контексте какого языка? Kendall Frey
Вы по крайней мере в безопасности отif (i=0) {} проблема, если вы используете c #, поскольку этот синтаксис недопустим. Chris Farmer

Ваш Ответ

8   ответов
2

Да, они такие же, как C #. Для более сложных ситуаций посетитеA == B против B == A, в чем различия

2

Для C ++ возможно, хотя и маловероятно, что может быть разница. Это зависит от того, какой у меня тип. например

struct Foo
{
    int x;
};

bool operator==(Foo lhs, int rhs)
{
    return lhs.x == rhs;
}

bool operator==(int lhs, Foo rhs)
{
    std::cout << "Hi!";
    return true;
}

Кто-то, кто пишет такой код, конечно, должен быть застрелен.

5

Функционально они одинаковы в C; Я не уверен насчет других языков, где в игру вступают такие уродливые вещи, как перегрузка операторов.

Стилистически, последнее крайне нелогично, и лично я нахожу это очень уродливым. Дело в том, чтобы компилятор выдавал ошибку, когда вы случайно пишете= вместо==Но у хороших компиляторов есть возможность предупредить вас об этом, так что это не нужно.

Error: User Rate Limit Exceeded
1

нет разницы, некоторые люди предпочитают второй, чтобы поймать распространенную ошибку назначение (=) вместо теста на равенство (==)

0 = i потерпит неудачу при компиляции

0

В C # нет разницы. Однако в C ++ была разница в производительности, поэтому вы видите, что оба они используются в коде C # в наши дни - на самом деле я думаю о производительности i ++ vs ++ i - 0 == i - это общая рекомендация по кодированию в C / C ++ для избежать i = 0 как случайная операция

29

Функционально разницы нет.
Некоторые разработчики предпочитают писать второй формат, чтобы избежать опечаток (в случае, если вы пропустите=), так что компилятор предупреждает об опечатке.
Второй известен какЙода Состояние.

Yoda Condition

Я говорю, что нет никакой разницы, потому что вы не можете защитить себя от каждой мельчайшей детали и полагаться на то, что компилятор выкрикнет за вас вслух. Если вы намереваетесь написать== Вы должны ожидать, что вы сами напишете== и не=.
 Использование второго формата просто приводит к неясному нечитаемому коду.
Кроме того, большинство основных компиляторов предупреждают оassignment вместоequality опечаткаиздавая предупреждение как только вы включите все предупреждения (которые вы должны в любом случае).

Error: User Rate Limit Exceededjargon question
Error: User Rate Limit Exceededhistorical lock
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
7

Вторая версия должна быть более безопасной.

Если вы забудете один знак равенства, он не изменит значение i на ноль.

1

Когда вы пишете (0 == i), ошибка использования одинарного знака равенства по ошибке (например, если (i = 0) устраняется. Ничего больше.

Похожие вопросы