X Tutup
The Wayback Machine - https://web.archive.org/web/20220111224141/https://ru.cppreference.com/w/cpp/language/except_spec
Пространства имён
Варианты
Действия

exception specification

Материал из cppreference.com
< cpp‎ | language

 
 
Язык С++
Общие темы
Управление потоком
Операторы условного выполнения
if
Операторы итераций (циклы)
Операторы переходов
Функции
Объявление функции
Выражение лямбда-функции
Спецификатор inline
Спецификации динамических исключений (до C++20)
Спецификатор noexcept (C++11)
Исключения
Пространства имён
Типы
Спецификаторы
decltype (C++11)
auto (C++11)
alignas (C++11)
Спецификаторы длительности хранения
Инициализация
Выражения
Альтернативные представления
Литералы
Логические - Целочисленные - С плавающей запятой
Символьные - Строковые - nullptr (C++11)
Определённые пользователем (C++11)
Утилиты
Атрибуты (C++11)
Типы
Объявление typedef
Объявление псевдонима типа (C++11)
Приведения
Неявные преобразования - Явные преобразования
static_cast - dynamic_cast
const_cast - reinterpret_cast
Выделение памяти
Классы
Свойства функции, зависящие от класса
explicit (C++11)
static
Специальные функции-элементы
Шаблоны
Разное
 
Список исключений, которые функция может прямо или косвенно бросают.
Оригинал:
Lists the exceptions that a function might directly or indirectly throw.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Содержание

[править] Синтаксис

throw(typeid, typeid, ...) (устарело)

[править] Объяснение

Если функция объявлена ​​с типом T, перечисленных в спецификации исключения, функция может генерировать исключения этого типа или типа, производного от него.
Оригинал:
If a function is declared with type T listed in its exception specification, the function may throw exceptions of that type or a type derived from it.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Если функция генерирует исключение типа, не перечисленных в спецификации исключения, функция std::unexpected называется. По умолчанию функция вызывает std::terminate, но она может быть заменена пользовательскую функцию (через std::set_unexpected), который можно назвать std::terminate или исключение. Если исключение из std::unexpected принимается спецификации исключения, стек раскручивание продолжается как обычно. Если это не так, но std::bad_exception допускается за исключением спецификаций, std::bad_exception брошен. В противном случае, std::terminate называется.
Оригинал:
If the function throws an exception of the type not listed in its exception specification, the function std::unexpected is called. The default function calls std::terminate, but it may be replaced by a user-provided function (via std::set_unexpected) which may call std::terminate or throw an exception. If the exception thrown from std::unexpected is accepted by the exception specification, stack unwinding continues as usual. If it isn't, but std::bad_exception is allowed by the exception specification, std::bad_exception is thrown. Otherwise, std::terminate is called.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Пример

class X {};
class Y {};
class Z : public X {};
class W {};
 
void f() throw(X, Y)
{
    int n = 0;
    if (n) throw X(); // OK
    if (n) throw Z(); // also OK
    throw W(); // will call std::unexpected()
}


[править] См. также

X Tutup