Возможный дубликат:
A == B vs B == A, Каковы различия
Первый код:
if(i==0) {// do instructions here}
Второй код:
if(0==i) { // do instructions here }
В чем разница между блоками?
Функционально нет никакой разницы.
Некоторые разработчики предпочитают записывать второй формат, чтобы избежать опечаток назначения (в случае, если вы пропустите a =
), чтобы компилятор предупреждал опечатки.
Второй класс известен как состояние Йоды .
Я говорю, что нет никакой разницы, потому что вы не можете охранять себя от каждой мелочной детали и полагаться на компилятор, чтобы кричать вслух для вас. Если вы намереваетесь написать ==
вы должны ожидать, что будете писать ==
а не a =
.
Использование второго формата просто приводит к некоторому неясному нечитаемому коду.
Кроме того, большинство компиляторов основного потока предупреждают о назначении вместо символа равенства, выдавая предупреждение, как только вы включаете все предупреждения (которые вы должны в любом случае).
Вторая версия должна быть более безопасной.
Если вы забудете один знак равенства, он не изменит значение i до нуля.
Функционально они одинаковы в C; Я не уверен в других языках, где приходят в игру уродливые вещи, такие как перегрузка операторов.
Стилистически последнее крайне противоречит интуиции, и лично я считаю его крайне уродливым. Дело в том, чтобы заставить компилятор выбросить ошибку, когда вы случайно напишете =
вместо ==
, но хорошие компиляторы имеют возможность предупредить вас об этом в любом случае, поэтому это не нужно.
Да, они такие же, как и для C #. Для более сложных ситуаций посетите A == B vs B == A, каковы различия
Для 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; }
Кто-то, кто пишет такой код, должен быть расстрелян.
Когда вы пишете (0 == i) ошибку, использующую единицу, равную знаку по ошибке (например), если (i = 0) устраняется. Ничего больше.
никакая разница, некоторые люди предпочитают второй, чтобы поймать распространенную ошибку выполнения задания ( =
) вместо теста равенства ( ==
)
0 = i
не смог бы при компиляции
В C # нет никакой разницы. Однако в C ++ была разница в производительности, поэтому вы видите, что оба используются в коде C # в эти дни – на самом деле я думаю о i ++ vs ++ i о производительности – 0 == i – общая рекомендация по кодированию в C / C ++ для избегать i = 0 в качестве случайной операции