Mediumcopy-elisionnrvo
Чем NRVO отличается от RVO?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
RVO (Return Value Optimization) — общий термин для copy elision при возврате. Часто под ним понимают URVO: возврат безымянного временного. NRVO — возврат именованной локальной переменной.
// URVO — mandatory в C++17
T f() { return T(args); }
// NRVO — опциональный даже в C++20
T g() {
T x;
// ...fill x...
return x;
}NRVO сложнее гарантировать: несколько return-путей, разные ветки, условные конструкции. Обычно срабатывает, если все return возвращают одну и ту же локальную переменную того же типа. Когда NRVO не срабатывает, используется move ctor (тоже быстро).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.