c++有4種型別轉換,reinterpret_cast, static_cast, dynamic_cast 和 const_cast
reinterpret_cast 可以將乙個指標轉換為任意其它型別的指標或int,或反之亦可。
可以在互不相關的類之間進行指標轉換,它只是簡單地將乙個指標的二進位制資料複製到另乙個指標,對指標指向的內容不做任何檢查或轉換。
classa {};
class
b {};
a * a = new
a;b * b = reinterpret_cast(a);
static_cast 可以執行所有能夠隱含執行的型別轉換,以及它們的反向操作(即使這種方向操作是不允許隱含執行的)。所謂能夠隱含執行的型別轉換,簡單點說就是合法的轉換(不合法的轉換比如:指向父類物件的父類指標轉為子類指標;兩個不相關的類的轉換等)
classbase {};
class derived: public
base {};
base* a = new
base;
derived* b = static_cast(a);
dynamic_cast 完全被用來進行指標的操作。它可以用來進行任何可以隱含進行的轉換操作以及它們被用於多型類情況下的合法方向操作。
class base ; }; //base必須有虛函式才能保證多型,編譯器會檢查base是否有虛函式
class derived : public
base ;
base* b1 = new
derived;
base* b2 = new
base;
derived* d1 = dynamic_cast(b1); //
succeeds (父類指標指向子類物件,該指標可以轉為子類指標)
derived* d2 = dynamic_cast(b2); //
編譯通過!但returns null (父類指標指向父類物件,該指標不可轉為子類指標)
設定或取消常量屬性
class a };a b;
const a a = b; //
const 宣告時必須初始化
//error, because a is a const object
a *a2 = const_cast(&a); //
指標a2->hello(); //
oka& a3 = const_cast(a); //
常量a3.hello(); //
ok
c 四種型別轉換
c風格的強制型別轉換 type cast 很簡單,不管什麼型別的轉換統統是 type b type a。c 風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。const cast,字面上理解就是去const屬性。static cast,命名上理解是靜態型別轉換。如int轉換成char。dy...
C 四種型別轉換
include include includeusing namespace std static cast 用法 static cast type id expression 該運算子把expression轉換為type id型別,但沒有執行時型別檢查來保證轉換的安全性。它主要有如下幾種用法 用於...
C 四種型別轉換
1 static cast 1.上行轉換,把派生類的指標或引用轉換成基類,此時是安全的 2.下行轉換,把基類的指標或者引用轉換成派生類,因為沒有動態監測,所以是不安全的 3.顯示型別轉換,如int轉float等 4.任意型別空指標轉任意型別空指標 5.任意型別表示式轉為void型別 如下 int a...