C ++ Static_cast指向虚拟基类的指针

时间:2016-06-24 13:35:08

标签: c++ casting downcast virtual-inheritance static-cast

经过大约6 o 7年的编程,几乎完全使用C ++编程,我发现:

struct A
{
   virtual ~A() = 0; // Abstract class
};

A::~A() {}

struct B : virtual A
{};

int main()
{
    A* a = new B;
    (void)static_cast<B*>(a);

    return 0;
}

抛出编译器错误,因为标准不允许从指向虚拟基类的指针进行静态强制转换。我假设这与与虚拟基类关联的内存布局有关,但我想知道详细信息。

1 个答案:

答案 0 :(得分:0)

原因是,virtual A内的BA内存图像可能不同。不要让它与众不同,众所周知的钻石&#39;无法解决(好吧,至少不容易,因为我们不能要求A意识到这一点,并建立一个比我们更优秀的ABI)。将virtual A视为AB的每个函数和成员访问权限的虚函数。它不一定像那样实现,但你可以这样建模。

相关问题