C++類別型轉換

2020-08-09 14:10:53

在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);