有人能告诉我为什么这段代码无法编译吗:
struct A { };
struct B : public A { };
int main()
{
B b;
A* a = &b;
B* &b1 = static_cast<B*&>(a);
return 0;
}
现在,如果您将静态转换替换为:
B* b1 = static_cast<B*>(a);
然后它就编译了。
编辑:很明显,编译器将A*
和B*
视为独立类型,否则这段代码会起作用。问题更多地是关于为什么要这样做?
a
不是指针的引用,而是指针。 - andreB*&
是指向B
的指针的引用。 - Some programmer dudedynamic_cast
才能强制编译器将运行时类型信息嵌入到该类层次结构中。由于dynamic_cast
操作相对较慢,因此除非必要,否则不建议使用这种解决方案。 - Agentliendynamic_cast
在这里是不合法的。 - James Kanze