Pie*_*BdR 4 c++ pointers reference const-cast
任何人都可以告诉我为什么这不编译:
struct A { };
struct B : public A { };
int main()
{
B b;
A* a = &b;
B* &b1 = static_cast<B*&>(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果你用以下方法替换静态强制转换:
B* b1 = static_cast<B*>(a);
Run Code Online (Sandbox Code Playgroud)
然后它确实编译.
编辑:显然编译器将处理A*和B*作为独立类型,否则这将起作用.问题更多的是为什么这是可取的?
B是衍生自A,但B*不是源自A*.指向Ba的指针不是指向a的指针A,它只能转换为一个指针.但是类型仍然不同(转换可以,而且经常会改变指针的值).A B*&只能引用a B*,而不能引用任何其他指针类型.