Mediumисключения

Чем noexcept-функция отличается от обычной и зачем это нужно?

1Постановка

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

2Решение

`noexcept` — спецификация, что функция не бросает исключений. Если noexcept-функция бросает, вызывается std::terminate — программа падает.

void safe() noexcept {
    // не бросает никогда
}

// Условный noexcept: noexcept если g() noexcept
template<class T>
void wrapper(T&& x) noexcept(noexcept(g(std::forward<T>(x))));
  • Компилятор может не генерировать код раскрутки стека — код меньше и быстрее;
  • Влияет на семантику STL: noexcept move-конструктор заставляет std::vector использовать move при реаллокации, иначе copy;
  • Деструкторы и delete по умолчанию noexcept.

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

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

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