此代碼是無效的,並不會編譯:C++雙指針投
struct A { int x; };
struct B : public A {};
void f(B** p){
A** pa = p; // type mismatch
}
它看起來無辜,雖然,它似乎與reinterpret_cast
工作。據我所知,有些情況並不是那麼簡單,例如當涉及多重繼承時,但在這種特殊情況下,應該沒有任何問題,編譯器應該能夠弄清楚這一點。那麼爲什麼在C++中不允許這樣做呢?考慮到上面給出的類型,reinterpret_cast
是一個很好的解決這個限制的方法嗎?