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
}