stałe odniesienie do optymalizacji wartości tymczasowej i powrotu

Zdaję sobie sprawę z faktu, że przypisanie wartości r do referencji stałej l rozszerza czas życia tymczasów do końca zakresu. Jednak nie jest dla mnie jasne, kiedy użyć tego i kiedy należy polegać na optymalizacji wartości zwracanej.

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 ?
}

Według Scot Meyers 'More Effective C ++ (pozycja 20) druga metoda może zostać zoptymalizowana przez kompilator w celu skonstruowania obiektu (który byłby idealny i dokładnie to, co próbuje się osiągnąć za pomocąconst& w pierwszej metodzie).

Czy istnieją jakieś ogólnie przyjęte zasady lub najlepsze praktyki podczas korzystaniaconst& do tymczasowych i kiedy polegać na RVO / NRVO?Czy może istnieć sytuacja, w której użycieconst& metoda jest gorsza niż jej nie używanie? (Myślę na przykład o semantyce ruchu C ++ 11, jeśliLargeObject ma te zaimplementowane ...)

questionAnswers(2)

yourAnswerToTheQuestion