2013年12月16日 星期一

C++學習筆記(3)-static_cast和dynamic_cast

static_cast:強轉型態,使用不安全轉型的時候會失敗造成程式錯誤,但是比起dynamic_cast稍快一些
ex:
double a = 1.0;
int b =  static_cast<int>(a);
這是安全的

class A{}
class B:public A{
     int a = 1;
     int getA();
}

void func(){
    B* b = new B;
    A* a = static_cast<A*>(b);
    a->getA();
}
這是不安全的,會失敗。

dynamic_cast:基本上適用於各種轉型,但其base class內必須要有virtual函式。此cast在執行時執行(相對於static_cast是在編譯時),所以效能較差
可用於交叉轉換,任何轉換下錯誤則回傳null,不會造成crash