Bedingungsfaktoren enthalten oft Kurzschlussoperatoren. Also, dieses Beispiel gegeben:
if (a=func(x) && b=func(y))
{
// do this
}
Es kann nicht ohne weiteres ersichtlich sein, aber die zweite Zuordnung erfolgt nur dann, wenn die ersten >0
zurückgekehrt, und wenn func(y)
andere Nebenwirkungen haben, dass Sie erwartet haben, würden sie auch nicht passieren .
Kurz gesagt, wenn Sie wissen, was Sie tun und die Nebenwirkungen verstehen, dann ist nichts falsch daran. Sie müssen jedoch die Möglichkeit in Erwägung ziehen, dass jemand anders Ihren Code beibehält, wenn Sie nicht mehr in der Lage sind. Möglicherweise sind Sie nicht so erfahren wie Sie.
if (a==func(x) && b==func(y)) ...
Wenn sie „reparieren“ Ihr Code, brechen sie es tatsächlich: die folgenden soll
Auch Sie zukünftige Maintainer vielleicht denken.
Ich hätte gedacht, dass die doppelte Klammer (die Klammer um die Zuweisung) sollte zeigen, dass die Zuordnung beabsichtigt ist. Einige Compiler unterdrücken die Warnung in diesem Fall, denke ich. – Draemon
Überprüfen Sie die Antwort der Marke: http://StackOverflow.com/a/2576969/560287 –
Schalten Sie diese Warnung aus, ersetzen Sie sie durch testgesteuerte Entwicklung. ;) Der Unterschied im Verhalten zwischen '=' und '==' ist so groß, dass deine Tests fehlschlagen sollten. (Anders als '==' vs '===' - Ich möchte meine IDE davor warnen, vorzugsweise) –