此代码是无效的,并不会编译:C++双指针投
struct A { int x; };
struct B : public A {};
void f(B** p){
A** pa = p; // type mismatch
}
它看起来无辜,虽然,它似乎与reinterpret_cast
工作。据我所知,有些情况并不是那么简单,例如当涉及多重继承时,但在这种特殊情况下,应该没有任何问题,编译器应该能够弄清楚这一点。那么为什么在C++中不允许这样做呢?考虑到上面给出的类型,reinterpret_cast
是一个很好的解决这个限制的方法吗?