Spec-Zone.ru › C++

std::bad_cast

Определён в заголовочном файле <typeinfo>
class bad_cast : public std::exception;

Исключение этого типа выбрасывается, когда dynamic_cast к ссылочному типу не проходит проверку во время выполнения (например, потому что типы не связаны наследованием), а также из std::use_facet, если запрошенная грань отсутствует в локали.

cpp/error/exception

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

Функции-члены

(конструктор)
создаёт новый объект bad_cast
(открытая функция-член)
operator=
заменяет объект bad_cast
(открытая функция-член)
what
возвращает поясняющую строку
(открытая функция-член)

std::bad_cast::bad_cast

bad_cast() throw();
(1) (до C++11)
bad_cast() noexcept;
(начиная с C++11)
bad_cast( const bad_cast& other ) throw();
(2) (до C++11)
bad_cast( const bad_cast& other ) noexcept;
(начиная с C++11)

Создаёт новый объект bad_cast с завершающей нулём байтовой строкой, определяемой реализацией и доступной через what().

1) Конструктор по умолчанию.
2) Конструктор копирования. Если *this и other имеют динамический тип std::bad_cast, то std::strcmp(what(), other.what()) == 0.(начиная с C++11)

Параметры

other - другой объект исключения для копирования

std::bad_cast::operator=

bad_cast& operator=( const bad_cast& other ) throw();
(до C++11)
bad_cast& operator=( const bad_cast& other ) noexcept;
(начиная с C++11)

Присваивает содержимое объекта содержимому other. Если *this и other имеют динамический тип std::bad_cast, то после присваивания std::strcmp(what(), other.what()) == 0.(начиная с C++11)

Параметры

other - другой объект исключения, содержимое которого присваивается

Возвращаемое значение

*this

std::bad_cast::what

virtual const char* what() const throw();
(до C++11)
virtual const char* what() const noexcept;
(начиная с C++11)
(constexpr начиная с C++26)

Возвращает поясняющую строку.

Возвращаемое значение

Указатель на завершающую нулём строку, определяемую реализацией и содержащую поясняющую информацию. Строка подходит для преобразования и отображения в виде std::wstring. Указатель гарантированно остаётся действительным по крайней мере до уничтожения объекта исключения, из которого он получен, или до вызова неконстантной функции-члена (например, оператора присваивания копированием) для объекта исключения.

При вычислении на этапе компиляции возвращаемая строка кодируется с использованием обычной кодировки литералов.

(начиная с C++26)

Примечания

Реализации могут, но не обязаны переопределять what().

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

Функции-члены

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

Примечания

Макрос проверки поддержки функциональности Значение Стандарт Функциональность
__cpp_lib_constexpr_exceptions 202411L (C++26) constexpr для типов исключений

Пример

#include <iostream>
#include <typeinfo>
 
struct Foo { virtual ~Foo() {} };
struct Bar { virtual ~Bar() { std::cout << "~Bar\n"; } };
struct Pub : Bar { ~Pub() override { std::cout << "~Pub\n"; } };
 
int main()
{
    Pub pub;
    try
    {
        [[maybe_unused]]
        Bar& r1 = dynamic_cast<Bar&>(pub); // OK, upcast
 
        [[maybe_unused]]
        Foo& r2 = dynamic_cast<Foo&>(pub); // throws
    }
    catch (const std::bad_cast& e)
    {
        std::cout << "e.what(): " << e.what() << '\n';
    }
}

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

e.what(): std::bad_cast
~Pub
~Bar

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/types/bad_cast

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API