[geschlossen] "a &= b()" != "a = a && b()" (Ausführverhalten) ?
-
Ich bin gerade darüber gestolpert das auf dem Compiler den ich gerade verwende der Ausdruck b je nach Schreibweise ausgewertet wird, oder nicht:
bool foo() { /* ... */ } int main() { bool a = false; // <= Beachten: false a &= foo(); // foo() wird ausgewertet <= nicht erwartet a = a && foo(); // foo() wird nicht ausgewertet <= erwartet }Ich dachte immer die Schreibweise "a &= b" soll eine gleichwertige Kurzform für "a = a && b" sein, sprich sich auch gleich verhalten.
Wer hat nun recht: Der Compiler oder ich...
-
Dein Denkfehler ist, dass
a &= bNICHTa = a && bbedeutet, SONDERNa = a & b!!!!!&ist nicht&&! Das&ist das binäre UND.Ich hoffe das ist klar.
(Ob der Operator
&&=existiert weiß ich nicht!)
-
a &= b; ist eine Schreibweise für a = a & b, also ein bitweises Oder. Für ein Bitweises oder müssen beide Argumente ausgewertet werden.
-
Manchmal sollte man nicht Programmieren wenn man etwas neben der Spur ist...