we have four specific castingoperators:dynamic_cast, reinterpret_cast, static_cast and const_cast. Their format is to follow the new type enclosed between angle-brackets (<>) and immediately after, the expression to be converted between parentheses.
dynamic_cast <new_type> (expression)
reinterpret_cast <new_type> (expression)
static_cast <new_type> (expression)
const_cast <new_type> (expression)
一、對C++中四種類型轉換總結如下:
const_cast(expr)
用來移除對象的常量性(cast away the constness)
const_cast一般用於指標或者引用
使用const_cast去除const限定的目的不是為了修改它的內容
使用const_cast去除const限定,通常是為了函數能夠接受這個實際參數
static_cast(expr)
編譯器隱式執行的任何類型轉換都可以由static_cast完成
當一個較大的算術類型賦值給較小的類型時,可以用static_cast進行強制轉換。
可以將void*指標轉換為某一類型的指標
可以將基類指標轉換為衍生類別指標
無法將const轉化為nonconst,這個只有const_cast才可以辦得到
reinterpret_cast(expr)
“通常為運算元的位元模式提供較低層的重新解釋”也就是說將資料以二進位存在形式的重新解釋。
int i;
char *p = "This is a example.";
i = reinterpret_cast<int>(p);
//此時結果,i與p的值是完全相同的。
int *ip
char *pc = reinterpret_cast<char*>(ip);
// 程式員需要記得pc所指向的真實對象是int型,並非字串。
// 如果將pc當作字元指標進行操作,可能會造成執行階段錯誤
// 如int len = strlen(pc);
dynamic_cast(expr)
執行“安全向下”轉型操作,也就是說支援運行時識別指標或所指向的對象,這是唯一個無法用舊式語來進行的轉型操作。
dynamic_cast可謂是最嚴格的轉換,static_cast次之,而reinterpret_cast則是最寬鬆的。如果你遇到不能將整型轉變為函數指標的問題,你可以這樣解決:
reinterpret_cast<LPFUN&>(nAddress);
注意LPFUN這裡有個“&”符號,表示引用,C++的引用其實就是用指標實現的,而這些“轉換”其實都是指標的轉換,所以加上引用符號編譯才能通過。