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 подскажет развёрнутый ответ в реальном времени.