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
沒有留言:
張貼留言