【发布时间】:2016-10-27 03:40:07
【问题描述】:
在几乎完全使用 C++ 进行了大约 6 到 7 年的编程之后,我发现:
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;
}
抛出编译器错误,因为标准不允许从指向虚拟基类的指针进行静态转换。我认为这与与虚拟基类关联的内存布局有关,但我想知道详细信息。
【问题讨论】:
-
你的代码编译;你不是说
struct B : public virtual A吗? -
感谢您的警告。解决了(是的,我的意思是)
标签: c++ casting downcast virtual-inheritance static-cast