Wenn ich eine Funktion zurückzukehren mir einen Container will:Return-Value-Optimierung: ho kann ich Kopie Konstruktion von großen STL-Container vermeiden.
vector<T> func(){
vector<T> result;
...
return result;
}
Um auf folgende Weise verwendet werden:
vector<T> result = func();
Um den Aufwand für das Kopieren von meinem Behälter zu vermeiden ich die oft schreiben Funktion, so dass es nichts zurückgibt, aber akzeptieren Sie eine nicht konstante Instanz des Containers.
vector<T> result;
func(result);
Ist meine Anstrengung sinnlos, weil ich sicher sein kann, dass der Compiler-Optimierung verwendet immer den Rückgabewert:
void func(vector<T>& result){
result.clear();
...
result;
}
Um in der folgenden Art und Weise verwendet werden?
Seit C++ 11 ist Ihr Aufwand bedeutungslos, bis C++ 11 der richtige Weg ist. – 101010
Sie sollten Ihr erstes Codebeispiel auch in C++ 03 verwenden. – Simple
Sie gehen davon aus, dass RVO, wenn angewendet, genauso effizient wie der andere Weg wäre. Das ist nicht immer der Fall. –