C++中四種類型轉換 const_cast是否能改變常量

來源:互聯網
上載者:User

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++的引用其實就是用指標實現的,而這些“轉換”其實都是指標的轉換,所以加上引用符號編譯才能通過。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.