const Referenz auf temporäre vs. Rückgabewertoptimierung

Mir ist bekannt, dass das Zuweisen eines Werts zu einer konstanten Wertreferenz die temporäre Lebensdauer bis zum Ende des Gültigkeitsbereichs verlängert. Es ist mir jedoch nicht klar, wann ich dies verwenden und wann ich mich auf die Rückgabewertoptimierung verlassen soll.

LargeObject lofactory( ... ) {
     // construct a LargeObject in a way that is OK for RVO/NRVO
}

int main() {
    const LargeObject& mylo1 = lofactory( ... ); // using const&
    LargeObject mylo2 = lofactory( ... ); // same as above because of RVO/NRVO ?
}

Nach Scot Meyers 'More Effective C ++ (Punkt 20) könnte die zweite Methode vom Compiler optimiert werden, um das Objekt an Ort und Stelle zu konstruieren (was ideal wäre und genau das, was man mit dem C ++ erreichen möchte)const& in der ersten Methode).

Gibt es allgemein anerkannte Regeln oder Best Practices für die Verwendung?const& zu Provisorien und wann man sich auf RVO / NRVO verlässt?Könnte es eine Situation geben, in der mit demconst& Methode ist schlimmer als es nicht zu benutzen? (Ich denke zum Beispiel über die C ++ 11 - Verschiebungssemantik nach, wennLargeObject hat die implementiert ...)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage