Christian Seiler: Coding Conventions

Beitrag lesen

Hallo,

$i = 10;
    while (machwas() && $i--)
    while (machwas() && --$i)
in PHP und in anderen Sprachen, C, C++, usw., auf den unterscheidlichen Plattformen bei ggf. unterschiedlichen Compilern ausgewertet, solange machwas()  immer true liefert?

Gibt es da Unterschiede?

Wenn machwas() true liefert, dann wird $i immer dekrementiert (in allen Sprachen). Allerdings gibt --$i den dekrementierten Wert zurück und $i-- den Wert vor dem Dekrementieren. Sprich: Die erste Schleife hat 10 Durchläufe, die zweite Schleife hat 9 Durchläufe (solange die Schleife selbst $i nicht modifiziert).

Wenn machwas() false liefert, dann kommt es darauf an. Bei PHP und C wird $i-- und --$i *nie* ausgewertet (der Sprachstandard garantiert es), bei C++ kommt es darauf an, ob der &&-Operator für die Operhandentypen überladen wurde - wenn ja, dann wird es ausgewertet, auch wenn machwas() false ist, wenn er nicht überladen wurde, dann nicht (das ist auch übrigens etwas, was viele Leute an C++ kritisieren).

Viele Grüße,
Christian