C++常見類型轉換有四種,分别為:dynamic_cast、static_cast、const_cast、reinterpret_cast。
1.dynamic_cast 主要用來執行“安全向下轉換”(safe downcasting),也就是用來決定某對象是否歸屬于繼承體系中的某個類型。它是唯一無法由舊式文法執行的動作(即C的類型轉換),也是唯一可能耗費重大運作成本的轉型動作。(指針由base轉換為derived時可以檢查傳回值是否為null,進行轉換成功與否的判定)
2.const_cast 通常用來将 對象的常量性轉除。它也是唯一有此能力的C++style轉型操作符。
3.reinterpret_cast 意圖執行低級轉換,實際動作可能取決于編輯器,這也就表示它不可移植。例如将一個pointer to int轉型為一個int。這一類轉型再低級代碼外很少見。多說一句: reinterpret_cast 常常被用作不同類型指針間的互相轉換,因為所有類型的指針的長度都是一緻的(32位系統上都是4位元組,64位為8位元組),按比特位拷貝後不會損失資料.有重新解釋指針的含義。
比如:int nVal = 1;
double *dptr = reinterpret_cast<double*>(nVal);
或者
int *iptr = NULL;
double *dptr = reinterpret_cast<double*>(iptr);
4.static_cast 用來強迫隐式轉換,例如将non-const對象轉換成const對象,或将int轉換為double等等。它也可以用來執行上述多種類型的反轉換,例如将void*指針轉換成typed指針,将pointer-to-base轉為pointer-to-derived。但它無法将const轉為non-cast,這個轉換必須由const-cat才能辦到。
到此C++的常用類型轉換總結完了,現給出一個有趣的例子:
class A{int n;};
class B{int m;};
class C:public A,public B{};
C c;
printf("%p %p %p\r\n", &c, reinterpret_cast<B*>(&c), static_cast<B*>(&c)),三者輸出有什麼差別
我是在win32平台下的運作結果:

這就關乎到C++對象的記憶體模型問題,關于C++的對象模型此處不再詳細說明。隻給出此例子的對象模型:
是以在執行static_cast轉換時會偏移一個n的大小,即四個位元組。讀者可以自行體會上面的運作結果,reinterpret_cast和static_cast的差別