Warum gibt es keinen &&= Operator?



  • Braunstein schrieb:

    Was soll dann deiner Meinung nach ein &&= machen?

    Mann mann mann. Denkt doch bitte mal ein bissel nach. TyRoXx hat doch beschrieben, dass man erwarten würde,

    t &&= aufruf(); // kein C++
    

    und

    t = t && aufruf();
    

    seien äquivalent. Letzteres ist legales C++ und ruft die Funktion nur dann auf, falls t als Wahrheitswert interpretiert wahr ist. Deswegen nenn man && und || auch "kurzschließendes Und/Oder".



  • Braunstein schrieb:

    Was soll dann deiner Meinung nach ein &&= machen?

    na das was er geschrieben hat - was man von einem op&&= eben erwarten würde.

    //a &&= b
    a = a && b
    


  • ... wobei a nur einmal evaluiert wird.



  • @pumuckl
    Das ist mir schon klar.
    Die Kurzschlussauswertung war mir hier egal. Wenn man die vernachlässigt (ob er das hier braucht hat der OP nicht geschrieben) funktioniert es auch mit &=.



  • ich denke, dass bei einem op &&= nicht so gut zu sehen wäre, dass der rechte ausdruck nicht immer ausgewertet wird...

    ich wüsste auch nicht, wo ich mal einen op &&= gebraucht hätte...

    bb



  • Bashar schrieb:

    ... wobei a nur einmal evaluiert wird.

    Was sehr selten einen Unterschied machen dürfte. Da a l-value UND r-value ist müsste es entweder bool sein oder eine konvertierng in einen bool-kompatiblen Typ haben (für den r-value) sowie eine konvertierung von bool oder einen op= für bool haben. Durch die fehlende Evaluierung würde lediglich die Konvertierung in den bool-kompatiblen Typen wegfallen, die keine weiteren Nebeneffekte haben sollte (und wenn doch will den Typ sicher eh keiner benutzen).



  • unskilled schrieb:

    ich wüsste auch nicht, wo ich mal einen op &&= gebraucht hätte...

    Damit kannst du sowas machen:

    bool success = true;
    success &&= machwas();
    success &&= machnochwas();
    success &&= undnochwas();
    

    Wenn mal eine Funktion false zurückgibt bricht die Kette ab. So eine Art throw.



  • Bashar schrieb:

    unskilled schrieb:

    ich wüsste auch nicht, wo ich mal einen op &&= gebraucht hätte...

    Damit kannst du sowas machen:

    bool success = true;
    success &&= machwas();
    success &&= machnochwas();
    success &&= undnochwas();
    

    Wenn mal eine Funktion false zurückgibt bricht die Kette ab. So eine Art throw.

    schreibste halt so...

    bool success = machwas()
        && machnochwas()
        && undnochwas();
    


  • ... ist aber unbequemer zu debuggen



  • da geb' ich dir recht, ja 🙂


Anmelden zum Antworten