如果我沒有指定顯式轉換到Base **,爲什麼會出現編譯錯誤?鑄造到派生類ptr到ptr
我可以在處理派生類時使用指針指針嗎?
class Base { };
class Child : public Base { };
void SomeFunction(Base** ppoObj) {}
void SomeFunction(Base* poObj) {}
int main()
{
Child *c = new Child();
// This passed.
SomeFunction(c);
SomeFunction((Base**)&c);
// CompilationError
SomeFunction(&c);
return 0;
}
當我使用SomeFunction((Base **)&c)時,我的程序運行良好。 運行時可能會出現哪些問題? @Wyzard –
對,沒有*隱式*演員。你的顯式強制覆蓋了編譯器的類型檢查 - 就像你可以將一個Child1 *轉換爲一個Child2 *一樣,即使它們是不相關的類型。將'Child **'強制轉換爲'Base **'應該可以,只要你只指定兼容類型的指針(即不要做我在這個例子中做的)。 – Wyzard