Ich habe kürzlich einen Artikel über die neue Bewegungssemantik in C++ gelesen. Es ging um die Verwirrung, wie man einen Rückgabewert für ein großes Objekt am besten implementiert. Die Schlussfolgerung war, implementieren Sie es einfach wie eine Kopie und lassen Sie den Compiler entscheiden, ob eine Bewegung am besten funktioniert.Sind konstante Referenzen in C++ 11 und später immer noch die beste Praxis?
Jetzt fragte ich mich, ob das auch für die Funktionsparameter gilt.
Derzeit verwende ich const Referenzen wie folgt aus:
void setLargeObject(const LargeObject &obj) {
_obj = obj;
}
Anstelle der einfachen Kopie:
void setLargeObject(LargeObject obj) {
_obj = obj;
}
sind Parameter, große Objekte zu kopieren, von const Verweis übergeben immer noch die beste Praxis in C++ 11 und später?
Ich glaube schon, eine Referenz ist schwerelos im Vergleich zu einem großen Objekt. – Vivick
Ich denke, es ist einfach für den Compiler zu wissen, dass der zurückgegebene Wert verschoben werden kann (insbesondere, wenn es eine lokale Variable ist, die den Gültigkeitsbereich verlässt). Ich denke nicht, dass es so einfach ist, das über Parameter zu wissen. – Steve