C 強制型別轉換

2021-07-25 06:15:35 字數 1126 閱讀 6188

在c語言中我們知道,型別轉換有隱式的型別轉換和顯示的強制型別轉換。而c++中提供了一下四個關鍵字分別用於不同場景下的型別轉換。

普通的型別轉換

void testcommencast()

static_cast/reinterpret_cast/const_cast/dynamic_cast

一、static_cast

它用於靜態轉換,只能用於內建型別之間的轉換。不能用於不相關型別之間的轉換。(不相關是指不能發生隱式轉換的型別)。用法如下:

void teststaticcast()

二、reinterpret_cast

它能做的事剛好是static_cast不能做的事,可以將一種型別轉換為另一種不同的型別,不能用於相關型別。兩種完全不相關的型別之間進行強轉,結果往往是不可**的,所以reinterpret_cast非常的bug,通常不建議用它。看看下面這個栗子:

typedef void(*func)();   //定義函式指標型別

int dosomething(int i)

void testreinterpretcast()

三、const_cast

主要用於去掉const屬性,方便賦值,用於指標和引用。但是乙個常量物件是不允許轉換的,它的本質其實是提供了乙個介面,通過此介面可以改變型別的值,原類的型別並沒有被改變。

void testconstcast()

//a還是2. *p為3.

四、dynamic_cast

用於將乙個父類物件的指標轉換為子類物件的指標或引用(動態轉換),所以它只能用於只能用於含有虛函式的類。我們知道,乙個子類的指標轉換成父類的指標是可以的,而父類的指標轉換成子類的指標是不行的,而dynamic_cast會在非法的時候返回0,相對安全。

class a 

};class b : public a

{};void fun(a* pa)

void testdynamiccast()

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...