Optimierungsfrage



  • Hi, welche der folgenden drei Varianten ist vorzuziehen? Die Funktion "GetValue" übergibt übrigens eine Referenz auf eine Objekt.

    void MyFunktion()
    {
        // 1. Variante
        Register(..., GetValue(), ...);
        Register(..., GetValue(), ...);
        Register(..., GetValue(), ...);
        ...
    
        // 2. Variante
        MyClass myValue = GetValue();
        Register(..., myValue, ...);
        Register(..., myValue, ...);
        Register(..., myValue, ...);
        ...
    
        // 3. Variante
        MyClass& myValue = GetValue();
        Register(..., myValue, ...);
        Register(..., myValue, ...);
        Register(..., myValue, ...);
        ...
    }
    


  • Variante 3.

    Auch wenn ich mir vorstellen könnte, das die erste optimiert wird.

    Edit: Vergiss nicht, dass die zweite potenziell was anderes anstellen könnte als Nr. 1/3!



  • Bitte Variante 4.

    // 4. Variante 
        MyClass const& myValue = GetValue(); 
        Register(..., myValue, ...); 
        Register(..., myValue, ...); 
        Register(..., myValue, ...);
    

    Sone schrieb:

    Vergiss nicht, dass die zweite potenziell was anderes anstellen könnte als Nr. 1/3!

    Die können alle drei was unterschiedliches machen (der Returnwert von GetValue() könnte sich ja von Aufruf zu Aufruf unterscheiden).



  • hustbaer schrieb:

    Die können alle drei was unterschiedliches machen (der Returnwert von GetValue() könnte sich ja von Aufruf zu Aufruf unterscheiden).

    Hast Recht.
    Ich dachte daran, dass GetValue() ein schlecht designter Getter wäre.
    Außerdem (zu Variante 4), denke ich, dass die Funktion das referenzierte Objekt modifiziert.



  • Wie kommst du auf solche Gedanken? Ich habe mir jetzt das hier ein paar mal durchgelesen und kann deinen Gedankengang nicht nachvollziehen. 😕



  • Grasshopper schrieb:

    Wie kommst du auf solche Gedanken? Ich habe mir jetzt das hier ein paar mal durchgelesen und kann deinen Gedankengang nicht nachvollziehen. 😕

    Nein, das war einfach Bauchgefühl. Wenn es nicht so ist, dann ist es nicht so, was ist das Problem?



  • Verdammt, ich wusste es gibt eine 4. Variante ;). Das zurückgegebene Object der Getter-Funktion ist natürlich const. Hätte ich noch erwähnen sollen.


Log in to reply