我有一个失败的动态演员。班级布局是这样的:
class A1
{
public:
virtual int foo1()=0;
};
class A2
{
public:
virtual int foo2();
};
class A3
{
public:
virtual int foo3();
};
class B : public A1, public A2, public A3
{
int bar();
};
Run Code Online (Sandbox Code Playgroud)
现在我使用指针(因此不会发生切片)进行向下转换。
main()
{
B b;
A1* a1 = dynamic_cast<A1*> (&b); // ok
B* b1 = dynamic_cast<B*> (a1); // ok
A2* a2_1 = dynamic_cast<A2*> (a1); // OSX 10.7 ok, OSX 10.9 fail
A2* a1_2 = dynamic_cast<A2*> (b1); // ok
};
Run Code Online (Sandbox Code Playgroud)
向下倾斜有效,向上倾斜有效,但侧倾并不总是有效。在 OSX 10.7 …