C的強制轉換和C++的強制轉換

來源:互聯網
上載者:User

標籤:

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++的強制轉換(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.