小编Hei*_*ner的帖子

dynamic_cast 失败 - 取决于操作系统版本

我有一个失败的动态演员。班级布局是这样的:

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 …

c++ macos gcc4

5
推荐指数
1
解决办法
2250
查看次数

标签 统计

c++ ×1

gcc4 ×1

macos ×1