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

std::bad_exception

Материал из cppreference.com
< cpp‎ | error
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Библиотека диагностики
Обработка исключений
Сбои обработки исключений
bad_exception
(до C++17*)
(до C++17*)
(C++11)(до C++17*)    
(до C++17*)
Коды ошибок
Коды ошибок
Категории исключений
(ТС TM)
Поддержка системных ошибок
(C++11)
(C++11)
Утверждения
Трассировка стека
 
std::bad_exception
 
Определено в заголовочном файле <exception>
class bad_exception;

std::bad_exception это тип исключения, генерируемого средой выполнения C++ в следующих ситуациях:

  • Если std::exception_ptr хранит копию перехваченного исключения и если конструктор копирования объекта исключения, перехваченного std::current_exception, генерирует исключение, перехваченное исключение является экземпляром std::bad_exception.
(начиная с C++11)
  • Если спецификация динамического исключения нарушена и std::unexpected генерирует или повторно генерирует исключение, которое по-прежнему нарушает спецификацию исключения, но спецификация исключения допускает std::bad_exception, std::bad_exception генерируется.
(до C++17)
cpp/error/exceptionstd-bad exception-inheritance.svg

Диаграмма наследования

Содержание

[править] Функции-элементы

создаёт объект bad_exception
(public функция-элемент)
копирует объект
(public функция-элемент)
[virtual]
возвращает пояснительную строку
(virtual public функция-элемент)

Унаследован от std::exception

Функции-элементы

уничтожает объект исключения
(virtual public of std::exception функция-элемент) [править]
[virtual]
возвращает поясняющую строку
(virtual public of std::exception функция-элемент) [править]

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

Компилируется только в режиме C++14 (или более ранней версии).

#include <iostream>
#include <exception>
#include <stdexcept>
 
void my_unexp()
{ 
    throw;
}
 
// Спецификации динамических исключений устарели в C++11
void test() throw(std::bad_exception)
{
    throw std::runtime_error("тест");
}
 
int main()
{
    // Устарело в C++11, удалено в C++17
    std::set_unexpected(my_unexp);
    try {
         test();
    } catch(const std::bad_exception& e)
    {
        std::cerr << "Поймано " << e.what() << '\n';
    }
}

Возможный вывод:

Поймано std::bad_exception