C++深入理解(11)------關於static_cast,dynamic_cast,const_cast,reinterpret_cast(讀書筆記)

        C語言規定了很多的隱式轉化,如將int轉爲double等,但是隱式轉化時常會造成一些問題,所以在C++中定義了四種規範轉換方式,來規範轉化。下面依次講述下每個轉化的用法:

        dynamic_cast:只能用於將派生類指針轉化爲基類指針,否則就會賦空值。這種轉化只能用於is-a類型的轉化,用法如下:

    BaseClass *pBase = dynamic_cast<BaseClass*>(pSub);
        const_cast:只用於一種用途,即將const轉化爲volatile,其語法
High bar ;
const High *pbar = &bar ;
High *pb = const_cast<High*> (pbar); //正確的,將pbar轉化爲可以非const
const Low *pi = const_cast<const Low *> (pbar); //非法的,如果將pbar轉化爲非const,但是又轉化爲const
        其他轉換都是非法的;

        static_cast:只能轉化可以隱式轉化的類型,如double可以隱式轉化爲int,派生類指針可以隱式轉化爲基類指針,但是基類指針轉化爲派生類指針就會報錯;

        reinterpret_cast:功能比較強大,他可以根據內存中的值轉化爲另一種類型,如

struct dat {short a ; short b ;};
long value = 0xA224B118;
dat * pd = reinterpret_cast<dat*> (&value );
cout << hex << pd->a ; / / display first 2 bytes of value
        dat的內存是連續的,將long在內存中的位置的指針位置給dat,同時將long轉化爲dat類型。有時處理結構體異常有用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章