std::bad_cast
| Definiert in Header <typeinfo> |
||
| class bad_cast : public std::exception; |
||
Eine Ausnahme dieses Typs wird ausgelöst, wenn ein dynamic_cast zu einem Referenztyp die Laufzeitprüfung nicht besteht (z. B. weil die Typen nicht durch Vererbung verwandt sind), und auch von std::use_facet, wenn die angeforderte Facette in der Locale nicht existiert.
Vererbungdiagramm
Inhalt |
[bearbeiten] Member-Funktionen
| (Konstruktor) |
konstruiert ein neues bad_cast-Objekt(öffentliche Memberfunktion) |
| operator= |
ersetzt das bad_cast-Objekt(öffentliche Memberfunktion) |
| what |
gibt den erklärenden String zurück (öffentliche Memberfunktion) |
std::bad_cast::bad_cast
| (1) | ||
bad_cast() throw(); |
(bis C++11) | |
| bad_cast() noexcept; |
(seit C++11) | |
| (2) | ||
bad_cast( const bad_cast& other ) throw(); |
(bis C++11) | |
| bad_cast( const bad_cast& other ) noexcept; |
(seit C++11) | |
Konstruiert ein neues bad_cast-Objekt mit einem implementationsdefinierten, nullterminierten Byte-String, der über what() zugänglich ist.
std::bad_cast haben, dann ist std::strcmp(what(), other.what()) == 0.(seit C++11)Parameter
| Sonstiges | - | ein anderes Ausnahmeobjekt zum Kopieren |
std::bad_cast::operator=
| bad_cast& operator=( const bad_cast& other ) throw(); |
(bis C++11) | |
| bad_cast& operator=( const bad_cast& other ) noexcept; |
(seit C++11) | |
Weist den Inhalt dem von other zu. Wenn *this und other beide den dynamischen Typ std::bad_cast haben, dann ist std::strcmp(what(), other.what()) == 0 nach der Zuweisung.(seit C++11)
Parameter
| Sonstiges | - | ein anderes Ausnahmeobjekt zum Zuweisen |
Rückgabewert
*this
std::bad_cast::what
| virtual const char* what() const throw(); |
(bis C++11) | |
virtual const char* what() const noexcept; |
(seit C++11) (constexpr seit C++26) |
|
Gibt den erklärenden String zurück.
Rückgabewert
Zeiger auf einen implementierungsdefinierten, nullterminierten String mit erläuternden Informationen. Der String kann für die Konvertierung und Anzeige als std::wstring verwendet werden. Der Zeiger ist garantiert gültig, mindestens bis das Ausnahmeobjekt, von dem er stammt, zerstört wird, oder bis eine nicht-const Memberfunktion (z. B. der Kopierzuweisungsoperator) für das Ausnahmeobjekt aufgerufen wird.
|
Der zurückgegebene String ist während der konstanten Auswertung mit der gewöhnlichen Literal-Codierung kodiert. |
(seit C++26) |
Anmerkungen
Implementierungen dürfen what() überschreiben, sind aber nicht dazu verpflichtet.
Abgeleitet von std::exception
Memberfunktionen
| [virtuell] |
zerstört das Ausnahmeobjekt (virtuelle öffentliche Memberfunktion von std::exception) |
| [virtuell] |
gibt einen erklärenden String zurück (virtuelle öffentliche Memberfunktion von std::exception) |
[bearbeiten] Hinweise
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_constexpr_exceptions |
202411L |
(C++26) | constexpr für Ausnahme-Typen |
[bearbeiten] Beispiel
#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'; } }
Mögliche Ausgabe
e.what(): std::bad_cast ~Pub ~Bar