exception specification
Материал из cppreference.com
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
Список исключений, которые функция может прямо или косвенно бросают.
Оригинал:
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() }

