static_cast,const_cast,dynamic_cast,reinterpret...

標準C++不只支持C風格類型轉換符,還定義瞭如下四種類型轉換符:html

static_cast
const_cast
dynamic_cast
reinterpret_cast

定義這些類型轉換符是爲了提供更好的類型檢查。程序員

1、C風格類型轉換符的缺點編程

C++支持如下兩種形式的C風格類型轉換:安全

int age=(int)sqrt(foo/3.25);     
 int age=int(sqrt(foo/3.25));

可是,這樣會使程序的意圖不明確,由於相同的語法你卻使用不一樣的類型轉換符…spa

(譯者:不是很明白這一段是什麼意思,但願哪位大俠能更改一下)ssr

2、四種類型轉換符指針

1.static_cast是這四種中最經常使用的。它可用於任何隱含的類型轉換——通常來講,當一個隱含的類型轉換致使信息丟失時,編譯器就會輸出警告信息,但你若是使用static_cast的話,編譯器就不會輸出這些警告信息。static_cast能夠用於類類型的向上或向下轉換(dynamic_cast也能夠,但不一樣的是,static_cast不會進行動態類型檢查,所以它的安全性要由程序員來保證)。code

2.const_cast能夠用來移除一個變量的const或volatile屬性。orm

3.dynamic_cast能夠用來對一個多態的指針或引用進行類類型向上、向下轉換。注意:dynamic_cast進行動態類型檢查,所以,在對一個指針進行類型轉換時,若是對象不是編譯器所指望的類型,它將會返回NULL;在對引用進行類型轉換時,它會拋出一個std::bad_cast異常。htm

4.reinterpret_cast用於兩個不相關類型之間的類型轉換。這個關鍵詞在咱們須要把類型映射回原有類型時用到它.咱們映射到的類型僅僅是爲了故弄玄虛和其餘目的,這是全部映射中最危險的(這句話是C++編程思想中的原話)。

 

相關連接: http://www.acm.org/crossroads/xrds3-1/ovp3-1.html

譯自:http://www.cppreference.com/wiki/cn:keywords:casting_comparison

相關文章
相關標籤/搜索