1. 程式人生 > >C++的四種類型轉換

C++的四種類型轉換

C++中,四個與型別轉換相關的關鍵字:static_cast、const_cast、reinterpret_cast、dynamic_cast

一、 static_cast

特點:靜態轉換,在編譯處理期間。 
應用場合:主要用於C++中內建的基本資料型別之間的轉換,如把int轉換為char,但是沒有執行時型別的檢測來保證轉換的安全性。

       上行轉換(派生類---->基類)是安全的;

  下行轉換(基類---->派生類)由於沒有動態型別檢查,所以是不安全的。

二、dynamic_cast

使用場景:只有在派生類之間轉換時才使用dynamic_cast;不能用於內建的基本資料型別的強制轉換

在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的;對於下行轉換,dynamic_cast是安全的(當型別不一致時,轉換過來的是空指標),而static_cast是不安全的(當型別不一致時,轉換過來的是錯誤意義的指標,可能造成踩記憶體,非法訪問等各種問題)

三、const_cast

使用場景:

  a、常量指標轉換為非常量指標,並且仍然指向原來的物件

  b、常量引用被轉換為非常量引用,並且仍然指向原來的物件

四、reinterpret_cast

使用場景:

它可以轉化任何內建的資料型別為其他任何的資料型別,也可以轉化任何指標型別為其他的型別。它甚至可以轉化內建的資料型別為指標,無須考慮型別安全或者常量的情形。不到萬不得已絕對不用。