c 中的4種型別轉換

2021-07-03 06:27:33 字數 1461 閱讀 8033

1.c++中有哪4個和型別轉換相關的關鍵字?這些關鍵字都有什麼特點?應該在哪些場合下使用.

c語言中的強制型別轉換可以隨意的轉換我們想要的型別了,格式如下(型別) 變數名;

為什麼c++還要引入新的4種型別轉換呢?

這是因為新的型別轉換控制符可以很好的控制型別轉換的過程,允許控制各種型別不同的轉換.

還有一點好處是c++的型別轉換控制符能告訴程式設計師或讀者我們這個轉換的目的是什麼,我們

只要看一下**的型別轉換控制符,就能明白我們想要達到什麼樣的目的.

1)static_cast (content)  靜態轉換.在編譯期間處理

它主要用於c++中內建的基本資料型別之間的轉換.但是沒有執行時型別的檢測來保證轉換

的安全性.

為什麼需要static_cast型別的轉換?

a.用於基類和子類之間的指標或引用的轉換。這種轉換把子類的指標或引用轉換為基類表示是安全的;

進行下行轉換,把基類的指標或引用轉換為子類表示時,由於沒有進行動態型別檢測,所以是不安全的;

b.把void型別的指標轉換成目標型別的指標(不安全).

c.用於內建的基本的資料型別之間的轉換.

d.把任何型別的表示式轉換成void型別的.

注意:static_cast不會轉換掉content的const,volatile,__unaligned屬性

2)const_cast(content):去常轉換;編譯時執行;

它主要作用同乙個型別之間的去常和新增常屬性之間的轉換.不能用做不同的型別之間的轉換.

它可以把乙個不是常屬性的轉換成常屬性的,同時它也可以對乙個本是常屬性的型別進行去常.

3)dynamic_cast(content) 動態型別轉換;也是向下安全轉型;是在執行的時候執行;

通常用於基類和派生類之間的轉換.轉換時會進行型別安全檢查。

a.不能用於內建的基本資料型別之間的轉換.

b.dynamic_cast轉換成功的話返回的是類的指標或引用,失敗返回null;

c.dynamic_cast進行的轉換的時候基類中一定要有虛函式,因為只有類中有了虛函式,

才說明它希望讓基類指標或引用指向其派生類物件的情況,這樣才有意義.

這是由於執行時型別檢查需要執行時型別的資訊,而這些資訊儲存在虛函式表中.

d.在類的轉換時,在類層次間進行轉換的時候,dynamic_cast和static_cast進行上行轉換

的時候效果是一樣的;但是在進行下行轉換的時候,dynamic_cast會進行型別檢查所以

它更安全.它可以讓指向基類的指標轉換為指向其子類的指標或是其兄弟類的指標;

4)reinterpret_cast(content)重解釋型別轉換;

它有著和c風格強制型別轉換同樣的功能;它可以轉化任何的內建資料型別為其他的型別,

同時它也可以把任何型別的指標轉化為其他的型別;它的機理是對二進位制資料進行重新的

的解釋,不會改變原來的格式,而static_cast會改變原來的格式;

C 中的4種型別轉換

c語言中實現了基本型別的轉換機制,比如int轉double,char轉int等等。轉換的格式也很簡單 轉換型別 變數或者 轉換型別 變數 在c語言中這種方法很簡潔高效,可以對任意型別做強制轉換,但缺點也是不少,比如double轉int的時候會出現精度損失。當到了c 的時候,因為類型別及c 的多型等機...

C 中4種型別轉換方式

首先型別轉換,比如以下 int i double d 12.0 i int d 但是這種強制轉換符對於類和類的指標來說,就比較麻煩,所以c 標準定義了四個新的轉換符 轉換乙個指標為其他型別的指標,也允許乙個指標轉換為整數型別,反之亦然 include using namespace std clas...

C 中4種 型別轉換 方式

dynamic cast var reinterpret cast var static cast var const cast var 1 執行時,檢查轉換 2 基類中一定要有虛函式 不能用於基礎型別 否則編譯不通過 3 成功的話返回的是指向類的指標或引用,轉換失敗的話則會返回null 更多請檢視...