Korrekte Uebergabe von const T& und T&
-
Hallo,
ich wuerde gerne wissen, wie man vernuenftig und sicher Werte, die eine Funktion berechnet, in einem std::vector<> speichert und zurueckgibt.
Folgendes Szenario:// Diese Moeglichkeit void foo1(const std::vector<double>& input, std::vector<double>& output) { // interpretiere input und fuege Werte an output an } // versus std::vector<double> foo2(const std::vector<double&> input) { std::vector<double> output; // interpretiere input und fuege Werte an output an return output; }Ich dachte, Version 'foo1' sei performanter als 'foo2', da keine Kopie von output angelegt werden muss.
Nur: Wenn jemand nun 'foo1' mit zweimal dem gleichen Vektor aufruftstd::vector<double> v; foo1(v,v);kann man ganz schnell in der Bredouille landen.
Was waere nun der beste Weg fuer eine 'foo' Funktion, um so etwas zu vermeiden?
'foo2', und man nimmt den overhead in Kauf, oder 'foo1' mit einer Modifikation, die den Selbstaufruf vermeidet?
-
Du kannst ja testen.
void foo1(const std::vector<double>& input, std::vector<double>& output) { if( &input == &output ) { // Fehlerbehandlung (Exception oder so) } // interpretiere input und fuege Werte an output an }