跳轉到內容

C++ 程式設計

來自華夏公益教科書

dynamic_cast 關鍵字用於將資料從一個多型型別的指標或引用轉換為另一個,類似於 static_cast,但會在執行時執行型別安全檢查以確保轉換的有效性。通常用於以安全的方式將指標或引用向上轉換繼承鏈(繼承層次結構),包括執行所謂的交叉轉換

語法
    TYPE& dynamic_cast<TYPE&> (object);
    TYPE* dynamic_cast<TYPE*> (object);

目標型別必須是指標或引用型別,表示式必須計算為指標或引用。

如果您嘗試轉換為指標型別,而該型別不是引數物件的實際型別,則轉換結果將為 NULL

如果您嘗試轉換為引用型別,而該型別不是引數物件的實際型別,則轉換將丟擲 std::bad_cast 異常。

當它不失敗時,dynamic_cast 返回目標型別指向表示式引用的物件的指標或引用。

  struct A {
    virtual void f() { }
  };
  struct B : public A { };
  struct C { };

  void f () {
    A a;
    B b;

    A* ap = &b;
    B* b1 = dynamic_cast<B*> (&a);  // NULL, because 'a' is not a 'B'
    B* b2 = dynamic_cast<B*> (ap);  // 'b'
    C* c = dynamic_cast<C*> (ap);   // NULL.

    A& ar = dynamic_cast<A&> (*ap); // Ok.
    B& br = dynamic_cast<B&> (*ap); // Ok.
    C& cr = dynamic_cast<C&> (*ap); // std::bad_cast
  }

華夏公益教科書