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

Оператор noexcept

Оператор noexcept в C++ выполняет две роли. Во-первых, он является спецификатором исключений и указывается после списка параметров функции, чтобы сообщить компилятору и программисту, что функция не выбрасывает исключений. Во-вторых, noexcept может использоваться как унарный оператор, который принимает выражение и возвращает true, если выражение гарантированно не выбрасывает исключений, и false в противном случае. Спецификатор может принимать константное выражение, например noexcept(true) или noexcept(false), а также условную форму noexcept(выражение).

Синтаксис

// спецификатор исключения return_type function_name(params) noexcept; return_type function_name(params) noexcept(expression); // оператор проверки noexcept(expression)

Пример

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

#include <iostream> using namespace std; void func() noexcept { cout << "noexcept function" << endl; } void func2() { cout << "normal function" << endl; } int main() { cout << noexcept(func()) << 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())) { T temp; cout << "processed" << endl; } int main() { cout << noexcept(process(1)) << endl; cout << noexcept(process("abcde")) << endl; return 0; }

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

1 1

Пример

Проверим, может ли операция присваивания выбрасывать исключение:

#include <iostream> #include <string> using namespace std; int main() { int a = 1; int b = 2; string s1 = "abcde"; string s2 = "12345"; cout << noexcept(a = b) << endl; cout << noexcept(s1 = s2) << endl; return 0; }

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

1 1

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

  • оператор constexpr,
    который вычисляет значение на этапе компиляции
  • оператор consteval,
    который требует вычисления на этапе компиляции
  • оператор static_assert,
    который проверяет условие на этапе компиляции
  • оператор decltype,
    который определяет тип выражения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить