Lassen Sie uns sagen, dass wir diese SituationWird RVO in dieser Situation angewendet?
std::string v_1()
{
return "name";
}
std::string test = v_1();
Ist RVO hier angewendet haben? Ich denke, dass die Antwort nein ist, denn die Regeln für die Anwendung von RVO lautet: "Wenn eine Funktion einen Klassentyp nach Wert zurückgibt und der Ausdruck der return-Anweisung der Name eines nichtflüchtigen Objekts mit automatischer Speicherdauer ist, was isn 't der Funktionsparameter oder ein Parameter der Fangklausel und , der den gleichen Typ (ohne Berücksichtigung der CV-Qualifikation der obersten Ebene) als Rückgabetyp der Funktion hat, dann entfällt Kopieren/Verschieben " Und in dieser Situation Das zurückgegebene Objekt hat nicht den gleichen Typ des Rückgabetyps der Funktion, aber ich bin nicht 100%, dass RVO hier nicht angewendet wird.
Vielen Dank.
PS. In diesem Vortrag https://www.youtube.com/watch?v=AKtHxKJRwp4 (Minute 40, Sekunde 18) Stephan, von Microsoft, spricht über eine Situation, in der RVO nicht angewendet werden kann, da der Rückgabetyp der Funktion anders ist als der Typ des zurückgegebenen Objekts (in seinem Beispiel ein Tupel vs ein Paar)). Ich denke, dass hier das gleiche Prinzip gilt.
Es ist meist gleichbedeutend mit 'return std :: string (" name ")' ... – Jarod42
Was zurückgegeben wird, ist * nicht * die 'const char *' ... – user268396
@ user268396 Sie haben Recht, aber in den meisten cases (auch hier) wird implizit in eins konvertiert, bevor es in string konvertiert wird ... :) –