inline oder nicht inline, das ist hier die Frage...
-
@Neku
nee es geht mir nur um den Codetechnischen aufbau, was zu bevorzugen wäre (und was natürlich schnell ist ;))ISSE bringt mir nichts, wenn der Aufbau des Codes Müll ist
Right?
Wegen der Referenz: Ich habe oft gesehen, das dort einige keinen Rückgabewert habe und andere nur eine Kopie seiner selbst und wiederum andere eine Referenz
Würd mich auch mal interessieren, was hier zu bevorzugen ist.
-
############### 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 egalvector 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;