bad_cast exception
The bad_cast exception is thrown by the dynamic_cast
operator as the result of a failed cast to a reference type.
Syntax
catch (bad_cast)
statement
Remarks
The interface for bad_cast is:
class bad_cast : public exception
The following code contains an example of a failed dynamic_cast
that throws the bad_cast exception.
// expre_bad_cast_Exception.cpp
// compile with: /EHsc /GR
#include <typeinfo>
#include <iostream>
class Shape {
public:
virtual void virtualfunc() const {}
};
class Circle: public Shape {
public:
virtual void virtualfunc() const {}
};
using namespace std;
int main() {
Shape shape_instance;
Shape& ref_shape = shape_instance;
try {
Circle& ref_circle = dynamic_cast<Circle&>(ref_shape);
}
catch (bad_cast b) {
cout << "Caught: " << b.what();
}
}
The exception is thrown because the object being cast (a Shape) isn't derived from the specified cast type (Circle). To avoid the exception, add these declarations to main
:
Circle circle_instance;
Circle& ref_circle = circle_instance;
Then reverse the sense of the cast in the try
block as follows:
Shape& ref_shape = dynamic_cast<Shape&>(ref_circle);
Members
Constructors
Constructor | Description |
---|---|
bad_cast | The constructor for objects of type bad_cast . |
Functions
Function | Description |
---|---|
what | TBD |
Operators
Operator | Description |
---|---|
operator= | An assignment operator that assigns one bad_cast object to another. |
bad_cast
The constructor for objects of type bad_cast
.
bad_cast(const char * _Message = "bad cast");
bad_cast(const bad_cast &);
operator=
An assignment operator that assigns one bad_cast
object to another.
bad_cast& operator=(const bad_cast&) noexcept;
what
const char* what() const noexcept override;
See also
dynamic_cast Operator
Keywords
Modern C++ best practices for exceptions and error handling
Feedback
https://aka.ms/ContentUserFeedback.
În curând: Pe parcursul anului 2024, vom elimina treptat Probleme legate de GitHub ca mecanism de feedback pentru conținut și îl vom înlocui cu un nou sistem de feedback. Pentru mai multe informații, consultați:Trimiteți și vizualizați feedback pentru