inline oder nicht inline, das ist hier die Frage...


  • Mod

    ############### 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.


  • Mod

    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 :


  • Mod

    ########### 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.


  • Mod

    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;
    

    😮


  • Mod

    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;
    

Anmelden zum Antworten