РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
574 of 815 menu

Спецификация noexcept

Спецификация noexcept сообщает компилятору, что функция или метод не выбрасывает исключений. Это позволяет компилятору применять более эффективные оптимизации и влияет на выбор перегрузок в шаблонах. Существует две формы записи: noexcept без параметров и noexcept(выражение), где выражение приводится к типу bool. Если функция помечена как noexcept, но внутри неё всё же возникает исключение, вызывается функция std::terminate, и программа аварийно завершается.

Синтаксис

// Простая форма return_type function_name(params) noexcept; // Условная форма return_type function_name(params) noexcept(expression); // Для методов класса class MyClass { public: void method() noexcept; };

Пример

Давайте объявим функцию, которая гарантированно не выбрасывает исключений:

#include <iostream> using namespace std; int safeDivide(int a, int b) noexcept { if (b == 0) { return 0; } return a / b; } int main() { cout << safeDivide(10, 2) << endl; cout << safeDivide(10, 0) << endl; return 0; }

Результат выполнения кода:

5 0

Пример

Давайте проверим с помощью оператора noexcept, выбрасывает ли функция исключения. Оператор возвращает true, если функция помечена как noexcept:

#include <iostream> using namespace std; void func1() noexcept { } void func2() { } int main() { cout << noexcept(func1()) << endl; cout << noexcept(func2()) << endl; return 0; }

Результат выполнения кода:

1 0

Пример

Давайте рассмотрим условную форму noexcept с выражением. Функция будет помечена как не выбрасывающая исключения только при выполнении условия:

#include <iostream> using namespace std; template <typename T> void process(T value) noexcept(noexcept(T(value))) { T res = value; cout << res << endl; } int main() { process(42); process("abcde"); return 0; }

Результат выполнения кода:

42 "abcde"

Смотрите также

  • оператор throw,
    который выбрасывает исключение
  • конструкция try,
    которая начинает блок обработки исключений
  • конструкция catch,
    которая перехватывает исключение
  • функция terminate,
    которая вызывается при нарушении noexcept
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить