постоянная ссылка на временную и возвращаемую оптимизацию

Я осознаю тот факт, что присвоение значения r для ссылки на константное значение продлевает время жизни временных файлов до конца области действия. Однако мне не ясно, когда использовать это и когда полагаться на оптимизацию возвращаемого значения.

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

По словам Скотта Мейерса Более эффективный C ++ (пункт 20): второй метод может быть оптимизирован компилятором для создания объекта на месте (что было бы идеально, и именно то, что вы пытаетесь достичь с помощьюconst& в первом методе).

Существуют ли общепринятые правила или лучшие практики, когда следует использоватьconst& Временам и когда положиться на RVO / NRVO?Может ли быть ситуация, когда использованиеconst& метод хуже, чем не использовать его? (Я'думаю, например, о C ++ 11 переместить семантику, еслиLargeObject это реализовано ...)

Ответы на вопрос(2)

Ваш ответ на вопрос