標籤:
C的強制轉換:
(type)<expression> 其中,type為類型描述元,如int,float等。<expression>為運算式。經強制類型轉換運算子運算後,返回一個具有type類型的數值,這種強制類型轉換操作並不改變運算元本身,運算後運算元本身未改變,例如: int nVar=0xab65; char cChar=char (nVar); 上述強制類型轉換的結果是將整型值0xab65的高端兩個位元組刪掉,將低端兩個位元組的內容作為char型數值賦值給變數cChar,而經過類型轉換後nVar的值並未改變。
C++的強制轉換:
static_cast < type-id > ( expression ) 該運算子把expression轉換為type-id類型,但沒有運行時類型檢查來保證轉換的安全性。它主要有如下幾種用法:
①用於類階層中基類(父類)和衍生類別(子類)之間指標或引用的轉換。 進行上行轉換(把衍生類別的指標或引用轉換成基類表示)是安全的; 進行下行轉換(把基類指標或引用轉換成衍生類別表示)時,由於沒有動態類型檢查,所以是不安全的。
②用於基礎資料型別 (Elementary Data Type)之間的轉換,如把int轉換成char,把int轉換成enum。這種轉換的安全性也要開發人員來保證。
③把null 指標轉換成目標類型的null 指標。
④把任何類型的運算式轉換成void類型。 注意:static_cast不能轉換掉expression的const、volitale、或者__unaligned屬性。
dynamic_cast< type-id > ( expression ) 主要用於類層次間的上行轉換和下行轉換,還可以用於類之間的交叉轉換。
1.在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的;
2.在進行下行轉換時,dynamic_cast具有類型檢查的功能,比static_cast更安全。
const_cast<T*>(a)
去掉類型中的常量,除了const或不穩定的變址數,T和a必須是相同的類型。
reinterpret_cast<T*>(a)
任何指標都可以轉換成其它類型的指標,T必須是一個指標、引用、算術類型、指向函數的指標或指向一個類成員的指標。
C的強制轉換和C++的強制轉換(轉)