Gibt es einen Unterschied zwischen i == 0 und 0 == i?

Erster Code:

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

Zweiter Code:

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

Was ist der Unterschied zwischen den Blöcken?

functional gibt es keinen Unterschied.
Einige Entwickler bevorzugen das Schreiben des zweiten Formats, um Tipperrors zu vermeiden (falls Sie a = verpassen), so dass der Compiler vor dem Tipperrors warnt.
Die zweite ist bekannt als Yoda Condition .

Yoda Zustand

Ich sage, dass es keinen Unterschied gibt, weil du dich nicht vor jedem winzigen Detail schützen kannst und dich auf Compiler verlässt, um laut für dich zu schreien. Wenn du vorhast, a == zu schreiben, solltest du erwarten, dass du a == und nicht a = schreibst.
Die Verwendung des zweiten Formats führt nur zu etwas unklarem, nicht lesbarem Code.
Außerdem warnen die meisten Mainstream-Compiler vor der Zuweisung anstelle von Gleichheits- Tipperrorsn, indem sie eine Warnung ausgeben, sobald Sie alle Warnungen aktiviert haben (was Sie ohnehin tun sollten).

Die zweite Version soll sicherer sein.

Falls Sie ein Gleichheitszeichen vergessen, wird der Wert von i nicht auf Null geändert.

functional sind sie in C gleich; Ich bin mir nicht sicher über andere Sprachen, in denen hässliche Dinge wie das Überladen von Operatoren ins Spiel kommen.

Stilistisch ist letzteres extrem kontraintuitiv und persönlich finde ich es extrem hässlich. Der Punkt ist, den Compiler zu veranlassen, einen Fehler zu verursachen, wenn Sie versehentlich = anstelle von == schreiben, aber gute Compiler haben eine Option, um Sie diesbezüglich zu warnen, so dass es unnötig ist.

Ja, sie sind gleich, was C # angeht. Für komplexere Situationen besuchen Sie A == B vs B == A, Was sind die Unterschiede

Für C ++ ist es möglich, obwohl es unwahrscheinlich ist, dass es einen Unterschied geben könnte. Es hängt davon ab, was ich Typ ist. z.B

 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; } 

Jemand, der solchen Code schreibt, sollte natürlich erschossen werden.

Wenn Sie schreiben (0 == i), wird der Fehler der Verwendung eines einzelnen Zeichens aus Versehen (z. B.) ignoriert, wenn (i = 0) eliminiert wird. Nichts anderes.

kein Unterschied, manche Leute bevorzugen den zweiten, um den üblichen Fehler zu erkennen, dass man Assignment ( = ) statt Gleichheitstest macht ( == )

0 = i würde bei der Kompilierung fehlschlagen

In C # gibt es keinen Unterschied. Aber in C ++ gab es einen Unterschied in der performance, weshalb Sie beide in C # -Code in diesen Tagen verwendet sehen – eigentlich denke ich an i ++ vs ++ i über performance – 0 == i ist eine gängige Codierung Empfehlung in C / C ++ zu Vermeiden Sie i = 0 als versehentliche Operation