class A {
public:
void function_A();
};
class B:public A {
public:
void function_B();
};
class C:public A {
public:
void function_C();
};
int main() {
A* a;
B b;
a = &b;
C* c = static_cast<C*>(a); //cast合法
c->function_C(); //此处会调用不存在的函数,
//实际上c指向的是一个B类的对象
//但是此处强行将其作为C类的对象解释
return 0;
}
比如说有一个父类
A
,派生出两个子类B
和C
,有一个A
类指针或引用a
指向了一个B
类对象b,此时用static_cast
进行下行转换,可以将其转换成C
类的对象(指针或引用),此时就会出现不安全,因为C
类的一些成员函数/变量对B
类的对象不适用。简单来说,就是可以利用
static_cast
在同一父类的不同子类的对象之间互转,导致型别的错误。举个例子: