noexcept - это спецификатор исключений в C++, появившийся в C++11. Он указывает, что функция обещает не генерировать исключений.
Применение:
noexcept, так как это позволяет использовать более эффективные реализации (например, std::vector может менять указатели вместо копирования элементов).Синтаксис:
Применяется к объявлению функции после списка параметров и перед спецификатором const, если применимо, и телом функции.
cpp
Поведение при нарушении:
Если функция, помеченная как noexcept, все же выбрасывает исключение, программа завершается вызовом std::terminate. Это происходит потому, что компилятор предполагает, что исключений не будет, и не генерирует необходимый код для их обработки.
Отличие от старого throw():
Старый спецификатор throw() (C++98) также указывал, что функция не выбрасывает исключений, но его семантика отличалась. При нарушении throw() вызывалась std::unexpected, а не std::terminate. Кроме того, throw() имел негативные последствия для производительности в некоторых случаях, тогда как noexcept скорее предназначен для оптимизации. С++11 устаревший throw() был заменен на noexcept.