static_cast和对指针的引用

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*作为独立类型,否则这将起作用.问题更多的是为什么这是可取的?

Jam*_*nze 6

B是衍生自A,但B*不是源自A*.指向Ba的指针不是指向a的指针A,它只能转换为一个指针.但是类型仍然不同(转换可以,而且经常会改变指针的值).A B*&只能引用a B*,而不能引用任何其他指针类型.