質問

次の C++ プログラムについて:

class Base { };

class Child : public Base { };

int main()
{   
    // Normal: using child as base is allowed
    Child *c = new Child();
    Base *b = c;

    // Double pointers: apparently can't use Child** as Base**
    Child **cc = &c;
    Base **bb = cc;

    return 0;
}

GCC は、最後の代入ステートメントで次のエラーを生成します。

error: invalid conversion from ‘Child**’ to ‘Base**’

私の質問は 2 つの部分に分かれています。

  1. Child** から Base** への暗黙的な変換がないのはなぜですか?
  2. この例は、C スタイルのキャストまたは reinterpret_cast. 。これらのキャストを使用することは、型安全性をすべて放棄することを意味します。これらのポインターを暗黙的にキャストするために、または少なくとも使用できるように変換を表現するために、クラス定義に追加できるものはありますか? static_cast その代わり?
役に立ちましたか?

解決

これが許可された場合は、あなたがこれを書くことができます:

*bb = new Base;

そしてcBaseのインスタンスを指すことになります。悪います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top