C 強制型別轉換

2021-08-21 20:34:45 字數 1121 閱讀 7020

c++中四種強制型別轉換:static_cast, reinterpret_cast, const_cast, dynamic_cast

1. static_cast(編譯時型別檢查)

用於基本的資料型別之間的轉換,例如把int轉換為char,把int轉換為enum,但這種轉換的安全性需要開發者自己保證,static_cast所做的只是簡單的截斷;

空指標轉換成目標型別的空指標;

任何型別的表示式轉換成void型別;

用於層次結構中父類和子類之間指標和引用的轉換;

對於第4點,存在兩種形式的轉換,上行轉換(子類到父類),下行轉換(父類到子類);對於static_cast,從子類到父類的轉換是安全的,因為子類包含了父類的所有資料成員和函式成員,從子類轉換到父類的指標物件可以沒有任何顧慮的訪問其成員;而對於從父類到子類的轉換,因為static_cast是在編譯時進行型別檢測,沒有執行時的型別檢查,是不安全的。

void test() 

2. dynamic_cast(執行時型別檢查)

主要用於類層次結構中父類和子類之間指標和引用的轉換,由於具有執行時型別檢查,可以保證下行轉換(父類到子類)的安全性,即:轉換成功就返回轉換後的正確型別指標,如果失敗,返回null;而static_cast如果失敗,不會返回null,所以不安全。

總結為以下兩句:

class base

};class derived :public base

;void test()

3. reinterpret_cast

用於將一種型別轉換為另一種不同的型別。用於底層的強制型別轉換,導致實現依賴的結果(不可移植),例如:將乙個指標轉換為整數。

typedef

void(*func)();

int dosomething(int i)

void test()

4. reinterpret_cast

刪除變數的const屬性,方便賦值。

void test()

void test()

C 強制型別轉換

四種型別可能很多人都常常忽略就象我一樣,但是有時還是比較有用的。不了解的建議看看,一些機制我也不是十分了解,只是將一些用法寫出來讓大家看看。強制轉化無論從語法還是語意上看,都是c 中最難看的特徵之一。但是基於c風格的轉化的語義的不明確性及其一些潛在問題。強制型別轉化最終還是被c 接受了。1.stat...

C 強制型別轉換

標準c 中主要有四種強制轉換型別運算子 const cast,reinterpret cast,static cast,dynamic cast等等。1 static cast a 將位址a轉換成型別t,t和a必須是指標 引用 算術型別或列舉型別。表示式static cast a a的值轉換為模板中...

C 強制型別轉換

關於強制型別轉換的問題,很多書都討論過,寫的最詳細的是c 之父的 c 的設計和演化 最好的解決方法就是不要使用c風格的強制型別轉換,而是使用標準c 的型別轉換符 static cast,dynamic cast。標準c 中有四個型別轉換符 static cast,dynamic cast,reint...