постоянная ссылка на временную и возвращаемую оптимизацию
Я осознаю тот факт, что присвоение значения 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
это реализовано ...)