Mediumnoexcept

Почему нужно помечать функции noexcept при возможности?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

`noexcept` — обещание не бросать. Даёт компилятору не генерировать код unwinding и помогает STL выбрать move вместо copy.

class Vector {
    int* data_;
    size_t n_;
public:
    // noexcept move — STL vector::resize выберет move
    Vector(Vector&& o) noexcept
        : data_(o.data_), n_(o.n_) { o.data_ = nullptr; o.n_ = 0; }

    // noexcept swap — основа copy-and-swap
    friend void swap(Vector& a, Vector& b) noexcept {
        std::swap(a.data_, b.data_);
        std::swap(a.n_, b.n_);
    }
};

Кандидаты на noexcept: swap, move-операции, деструкторы (неявно noexcept с C++11), trivial getters. Не помечайте noexcept, если функция реально может бросить — иначе std::terminate.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.