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:
noexceptmove-конструктор заставляетstd::vectorиспользовать move при реаллокации, иначе copy; - Деструкторы и
deleteпо умолчаниюnoexcept.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.