在C語言中轉換型別的方法一般是使用強制轉換,就如下列的轉換方法
int i = 0;
void *v = (void *)i;
在C++中型別的轉換大致有四種:
1. dynamic_cast型別轉換
(1) dynamic_cast是在執行時檢查的,屬於動態轉換;
(2) 一般用於基礎類別和派生類之間的相互轉換。
QThread *thread = new QThread;
QObject *obj = dynamic_cast<QObject *>(thread);
2. static_cast型別轉換
(1) static_cast會在編譯的過程中進行安全性檢查, 相對與dynamic_cast是靜態轉換;
(2) 一般用於內建數據型別的轉換和通常的類之間的轉換。
int i = 0;
double d = static_cast<double>(i);
3. const_cast型別轉換
主要是用於去掉指針和參照的const和volatile型別。
const int *p = 0;
int *q = NULL;
q = const_cast<int *>(p);
4. reinterpret_cast型別轉換
(1) reinterpret_cast是爲了對映到一個完全不同類型的意思,這個關鍵詞在我們需要把型別對映回原有型別時用到它。我們對映到的型別僅僅是爲了故弄玄虛和其他目的,這是所有對映中最危險的。(這句話是C++程式設計思想中的原話)
(2) 用於完全沒有關係指針或參照之間的轉換,比如浮點型指針轉整型指針;
(3) 相當於強制轉換,不會考慮安全檢查問題,這是需要值得注意的,不像dynamic_cast與static_cast進行安全檢查。
int i = 0;
double d = reinterpret_cast<double&>(i);