c 中各種型別轉換

2021-07-30 04:07:56 字數 965 閱讀 8361

c++中的型別轉換包括隱式型別轉換和顯式型別轉換。隱式型別轉換例如在int與float相加時已經發生,顯示型別轉換主要包括以下四種:

1. static_cast:

主要用於非多型之間的型別檢查。不提供執行時的型別檢查來確保轉換的安全性,因此效率較高。常應用於以下場景:

* 類層次結構中,父類與子類的指標和引用之間的轉換,子類轉父類時是安全的,父類轉子類時是不安全的,需要程式設計師自己來保證安全性。

* 基本資料型別之間的轉換,這種轉換的安全性需要程式設計師自己來保證。

* void指標轉換為其他型別指標,及其不安全。

注:static_cast不能轉換掉expression的const、volatile和__unaligned屬性。

2. dynamic_cast:
轉換型別必須是指標或者引用,src和target需要同為指標或者引用。既可以用於類層次結構中的轉換,也可以用於類之間的轉換。

* 類層次結構中,子類轉父類與static_cast基本一致,父類轉子類提供了執行時檢查,因此是安全的。

* 轉換成(void*),src必須包含虛函式。

* 如果src是基類指標,則轉換過程中會判斷真的指向target型別物件,否則返回null,如果src是基類引用,則會拋異常。

3. reinterpret_cast:
處理無關型別之間的轉換。它會產生乙個新的值,新的值與src之間擁有完全一樣的位元位。但是不能去除變數的const等屬性。
4. const_cast:
const_cast可以將const, volatile和__unaligned移除。

注:你不能直接對非指標和非引用的變數使用const_cast操作符去直接移除它的const、volatile和__unaligned屬性。

volatile是為了防止多工情況下,變數的取值不是從記憶體中取而是從暫存器cache裡面取的。

各種型別轉換 C

1.int轉string char buffer 50 int count value total asint sprintf s buffer,d count std string out buffer 2.string轉int std string str 123 int n atoi str....

c 中的各種型別轉換

const cast 去掉const屬性 const int base 1 int b base 編譯錯誤 int b const cast base dynamic cast 只能用於指標和引用的轉換,可以將父類指標轉換成對應的子類指標,但是在向下轉換的時候父類一定要有虛函式,否則會編譯錯誤,如果...

各種型別的轉換

int i 100 long l 2001 float f 300.2 double d 12345.119 char username csdn char temp 200 char buf cstring str variant t v1 bstr t v2 一 其它資料型別轉換為字串 二 字串...