Die Deppenaddition
-
Ich würde sagen, dass (1) oft einfach verwendet wird, weil mans gerade nicht weiss.
Passiert mir auch immer mal wieder, dass ich etwas kleines in einer anderen Sprache mache und gerade nicht weiss, ob es den += Operator gibt oder nicht und mach darum (1).
Eine andere Quelle (meine Vermutung) wäre refactoring. Man hatte z.B mal so etwas:
a = b*a+1
und die anderen Variablen/Werte mal entfernt und gerade eben nicht auch den anderen Operator genommen.
-
TyRoXx schrieb:
...und damit Code-Redundanz erspart?
Ähm...du willst jetzt also tatsächlich behaupten, dass "a = a + b;" in mehr Binärcode resultiert? Autsch...als nächstes lässt du dann wohl auch Kommentare weg, damit die Binaries kleiner werden...
-
WaHoooo schrieb:
TyRoXx schrieb:
...und damit Code-Redundanz erspart?
Ähm...du willst jetzt also tatsächlich behaupten, dass "a = a + b;" in mehr Binärcode resultiert?
Nö
-
WaHoooo schrieb:
TyRoXx schrieb:
...und damit Code-Redundanz erspart?
Ähm...du willst jetzt also tatsächlich behaupten, dass "a = a + b;" in mehr Binärcode resultiert?
Gemeint ist eindeutig, dass man den + Operator für benutzerdefinierte Typen nach Schema F mithilfe des += Operators implementieren kann (
Foo temp(lhs); temp+=rhs; return temp;
), während man umgekehrt die vorhandene Implementation des + nicht vernünftig für einen += verwenden kann.
-
Bashar schrieb:
während man umgekehrt die vorhandene Implementation des + nicht vernünftig für einen += verwenden kann.
*HUST* bitte? Was heißt unvernüftig?
-
Hacker schrieb:
Bashar schrieb:
während man umgekehrt die vorhandene Implementation des + nicht vernünftig für einen += verwenden kann.
*HUST* bitte? Was heißt unvernüftig?
Foo& operator+=(Bar const& bar) { *this = *this + bar; return *this; }
Das ist nicht vernünftig, da sinnlos rumkopiert wird. Außerdem muss das Objekt überhaupt kopierbar sein.
-
TyRoXx schrieb:
//(1) a = a + b; //(2) a += b;
Warum wird fast immer in Beispielen Variante (1) verwendet
Echt?
-
TyRoXx schrieb:
Musst ja nicht antworten.
Musst den Thread ja auch nicht erstellen.
-
Ethon schrieb:
Hacker schrieb:
Bashar schrieb:
während man umgekehrt die vorhandene Implementation des + nicht vernünftig für einen += verwenden kann.
*HUST* bitte? Was heißt unvernüftig?
Foo& operator+=(Bar const& bar) { *this = *this + bar; return *this; }
Das ist nicht vernünftig, da sinnlos rumkopiert wird. Außerdem muss das Objekt überhaupt kopierbar sein.
Foo const operator+(Bar const& bar) { Foo temp(*this); temp += bar; return temp; }
Und hier ist irgendetwas anders?
-
edit: Fairerweise Zitat entfernt.
Hacker schrieb:
Und hier ist irgendetwas anders?
Das ist operator+, da muss sowieso kopiert werden. Es ging um operator+=. Wenn man den mithilfe von operator+ implementiert, dann hat man da eine sinnlose Kopie.
Bringt dir das eigentlich was, bei dem Thema so rumzudiskutieren? Wenn du es besser weißt, dann sag es einfach explizit. Falls nicht -- und es sieht leider danach aus -- lies deinen Scott Meyers oder was man so an Anfängerliteratur heutzutage empfiehlt.
-
Zumal schon der Unterschied erwähnt wurde
-
Hacker schrieb:
Komm. Unnötigere Themen hab ich selten gesehen.
Aber Hauptsache rege mitdiskutieren, wie?
-
Sehe da keine Verbindung zu 'Deppen', Anfänger kennen eben noch nicht alle Befehle.