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