Warum gibt es keinen &&= Operator?
-
Ad aCTa schrieb:
Nach C++-Standard ist das möglich.
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdf
Seite 267Weder auf Seite 103 noch auf Seite 267 sehe ich ein
&&=.Braunstein schrieb:
Hier kann man doch auch problemlos &= nehmen.
Woher willst Du das wissen?
wasAnderes()würde dann in jedem Fall ausgeführt. Ob das in Ordnung ist oder nicht, weiß man ja nicht.
-
Was soll dann deiner Meinung nach ein &&= machen?
-
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
