Пространства имён
Варианты
Действия

exception specification

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

 
 
Язык С++
Общие темы
Управление программой
Операторы условного выполнения
Операторы повторения
Операторы перехода
Функции
объявление функции
объявление лямбда-функции
шаблон функции
спецификатор inline
спецификаторы исключений (устарело)
спецификатор noexcept (C++11)
Исключения
Пространства имён
объявление пространства имён
псевдонимы пространства имён
Типы
спецификатор decltype (C++11)
Спецификаторы
cv-спецификаторы
спецификаторы продолжительности хранения
спецификатор constexpr (C++11)
спецификатор auto (C++11)
спецификатор alignas (C++11)
Инициализация
Литералы
Выражения
Утилиты
Типы
typedef-объявление
объявление псевдонима типа (C++11)
атрибуты (C++11)
Приведения типов
неявные преобразования
const_cast-преобразование
static_cast-преобразование
dynamic_cast-преобразование
reinterpret_cast-преобразование
C-подобное и функциональное приведение типов
Выделение памяти
Классы
Особые свойства классовых функций
Специальные функции-члены
Шаблоны
шаблон класса
шаблон функции
специализация шаблона
упакованные параметры (C++11)
Разное
Ассемблерные вставки
 
Список исключений, которые функция может прямо или косвенно бросают.
Оригинал:
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()
}


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