inline oder nicht inline, das ist hier die Frage...
-
############### schrieb:
Persönlich finde ich variante 1 besser, da man diese leichter pflegen kann (sonst muss man an 2 stellen gleichzeitig!) und mehr code erspart. jedoch was ist mit dem konstruktor der zusätzlich aufgerufen wird?!

theoretisch ist alles wegoptimierbar. und praktisch wissen wir nicht, ob das geschehen wird.
andererseits verstehe ich nicht, was für eine art vektor hier implementiert wird. dein *= operator berechnet weder ein sklar- noch vektor-produkt. ich habe also gweisse zweifel, dass zwischen beiden operatoren ein logischer zusammenhang besteht (jedenfalls dann, wenn der übliche vektorbegriff und die üblichen operationen darauf implementiert werden sollen).
-
@camper
Ich weiß, mathematisch nicht korrekt, aber Scalar und Punktprodukt berechne ich über seperate Funktionen.
-
Neku schrieb:
Ich gebe bei +=, *= etc. im übrigen keine Referenz auf ein konstantes Objekt zurück, ich weiß aber auch nicht, wie es standardmäßig ist.
es gibt keinen standard für die x= operatoren, denn diese werden nicht implizit definiert. allerdings ist das ergebnis für die eingebauten operatoren immer ein non-const lvalue. für operator= ist die frage dagegen klar: auch der implizit definierte operator gibt eine referenz auf nicht-const zurück.
-
@camper
bitte was? *nichts versteh* : confused :
-
########### schrieb:
@camper
Ich weiß, mathematisch nicht korrekt, aber Scalar und Punktprodukt berechne ich über seperate Funktionen.es gibt nat. für alles grenzfälle. ich halte variante 2 hier für besser, denn die einzelne zeile in der ersten variante ist um ein vielfaches komplexer - ohne das das einen fundamentalen zugewinn bringt. es steht ja zu erwarten, dass beide funktionen direkt nacheinander implementiert werden - somit ist der zugewinn an wartbarkeit in diesem falle eher theoretischer natur. das könnte anders aussehen, wenn du erheblich mehr solcher funktionen hast, die auf diesen operator zurückzuführen sind.
-
schrieb:
@camper
bitte was? *nichts versteh* : confused :fazit: gibt normale referenzen auf *this zurück.
-
@camper
also kein const? hmn okay. weiß zwar net warum aber egal
-
########## schrieb:
@camper
also kein const? hmn okay. weiß zwar net warum aber egal
vector v1(1,2,3), v2(4,5,6); v1 += 1 += v2 += 1;
-
vector v1(1,2,3), v2(4,5,6); v1 += 1 += v2 += 1;
das würde auch mit referenzen auf const oder kopien als rückgabewert funktionieren, denn alle diese operatoren sind rechtsassoziativ. hier müsste der operator allerdings als freie funktion implementiert werden, da die erste 1 als linker operand auftritt.
-
camper schrieb:
vector v1(1,2,3), v2(4,5,6); v1 += 1 += v2 += 1;
das würde auch mit referenzen auf const oder kopien als rückgabewert funktionieren, denn alle diese operatoren sind rechtsassoziativ. hier müsste der operator allerdings als freie funktion implementiert werden, da die erste 1 als linker operand auftritt.
My fault.
vector v1(1,2,3), v2(4,5,6); (v1 += 1) += v2 += 1;