C 風格的強制性型別轉換

2021-09-24 10:40:10 字數 1308 閱讀 6279

顯示型別轉換

被稱為強制型別轉換(cast)

c風格:(type_id)

c++風格:static_cast, dynamic_cast, reinterpret_cast, const_cast

在《c++的設計和演化》中告訴我們,解決強制性型別轉換的最好的解決方法是使用標準的c++的型別轉換,也就是上面提到的四個型別轉化。下面我們來看看這幾個的區別。

static_cast:用法:static_cast(expression)

該運算子把expression轉換為type_id型別,但沒有執行時的檢查來保證轉換的安全性。

使用static_cast的情況:1.void指標轉其它型別的指標,2.改變通常的的標準轉換,3.避免出現可能多種轉化的歧義

具體使用情況如下:a.用於類中基類和子類之間指標或引用的轉換,進行上行轉行,就是把子類的指標或引用轉換成基類表示是安全的,相反這是不安全的,原因是沒有型別安全檢查。

dynamic:dynamic_cast(expression)

該運算子把expression轉換成type-id,且這兩部分必須是類的指標,類的引用或者void*。

dynamic_cast主要用於類層次間的上行轉換下行轉換,還可以用於類之前的交叉轉換。在上行轉換的時候它和 static_cast效果是一樣的,在下行轉換時,dynamic_cst更安全,應為它具有型別安全功能檢查。dynamic_cast還可以使用如下的交叉的型別轉換。

class a

};class b:public a

;class c: public a

;void f()

在上述的函式f中static_cast進行轉換是錯誤的,編譯的時候編譯器會終止編譯,但是dynamic_cast是允許的,結果是空指標。

reinpreter_cast*(expression) type-id 必須是乙個指標,引用,算數型別,函式指標或者成員指標。可以把乙個指標轉換成乙個整數,也可以反過來把乙個整數轉換成乙個指標。

const_cast:用法:const_cast(expression)

該運算子用來修改型別的const或volatile屬性,除了const和volatile修飾之外type_id和expression的型別是一樣的。下面來乙個簡單列子:

class b;

void f()

上面的b1那裡修改值是會報錯的,但是b2那裡是不會報錯的,用為用了cosnt_cast。

發表於

2015-07-16 14:15

周某某 閱讀(

...)

編輯收藏

重新整理頁面

返回頂部

C 風格的強制轉換

看起來,使用c風格的強制轉換可以把想要的任何東西轉換成合乎心意的型別。那為什麼還需要乙個新的c 型別的強制轉換呢?新型別的強制轉換可以提供更好的控制強制轉換過程,允許控制各種不同種類的強制轉換。c 裡有4種不同型別的強制轉換操作,取決於要強制轉換的東西 static cast const cast ...

什麼是強制性3C認證?

什麼是強制性3c認證?ccc認證作為中國強制性認證,英文名稱為china compulsory certification,在3c認證目錄內的產品只有做了3c認證,才可以准許其出廠銷售 進口和使用,否則你的產品就不能使用這個ccc認證的證明標記。中國強制性認知ccc認證是根據 強制性產品認證管理規定...

C 強制型別轉換

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