C 強制型別轉換

2021-07-04 08:59:59 字數 1040 閱讀 1961

c++中主要包含了四種強制型別轉換,讓我們來看看它們的區別和聯絡。

static_cast:這是最常見的一種強制轉換了,在功能上基本和c風格的型別轉換一樣,含義也一樣。允許執行任意的隱式轉換和相反轉換動作(即使它是不允許隱式的)。例如:應用到類的指標上,意思是它允許子類型別的指標轉換為父類型別的指標(這是乙個有效的隱式轉換),同時也能夠執行想敏感詞作:轉換父類為它的子類。

class base {}; 

class derive:public base{};

base* a = new base;

derive *b = static_cast(a);

reinterpret_cast:轉換乙個指標為其他型別的指標。它也允許從乙個指標轉換為整數型別,反之亦然。這個操作符能在非相關型別之間轉換。操作結果只是簡單的從乙個指標到別的指標的值的二進位制拷貝。在型別之間指向的內容不做任何型別的檢查和轉換。

class a{}; 

class b{};

a* a = new a;

b* b = reinterpret_cast(a);

dynamic_cast:只用於物件的指標和引用。當用於多型型別時,它允許任意的隱式型別轉換以及相反過程。不過與static_cast不同,在後一種情況裡(注:即隱式轉換的相反過程),dynamic_cast會檢查操作是否有效。也就是說,它會檢查轉換是否會返回乙個被請求的完整物件。檢查在執行時進行。如果被轉換的指標不是乙個被請求的有效完整物件的指標,返回值為null。對於引用型別,會丟擲bad_cast異常。

const_cast:這個轉換型別操縱傳遞物件的const屬性,或者是設定,或者是移除,例如:

class c{};

const c* a = new c;

c *b = const_cast(a);



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