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