標準C++不只支持C風格類型轉換符,還定義瞭如下四種類型轉換符:html
static_cast const_cast dynamic_cast reinterpret_cast
定義這些類型轉換符是爲了提供更好的類型檢查。程序員
C++支持如下兩種形式的C風格類型轉換:安全
int age=(int)sqrt(foo/3.25);
int age=int(sqrt(foo/3.25));
可是,這樣會使程序的意圖不明確,由於相同的語法你卻使用不一樣的類型轉換符…spa
(譯者:不是很明白這一段是什麼意思,但願哪位大俠能更改一下)ssr
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