【发布时间】:2013-01-17 15:44:04
【问题描述】:
谁能告诉我为什么这不能编译:
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不是对指针的引用,而是指针。 -
@MrLister
B*&是对指向B的指针的引用。 -
仅供参考,dynamic_cast 会更安全
-
@user814628 仅当您不知道(由于程序逻辑)强制转换是有效的,并且使用
dynamic_cast强制编译器将运行时类型信息嵌入到该类层次结构中。将此与dynamic_cast的相对较慢的操作相结合,这是一个除非必要,否则您不想使用的解决方案。 -
@user814628
dynamic_cast在这里是不合法的。
标签: c++ pointers reference const-cast