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).
const&
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 ...)