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