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, dassGetValue()
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.