[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 &= b NICHT a = a && b bedeutet, SONDERN a = 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...


Anmelden zum Antworten