Cpp 型別轉換

2021-07-10 03:55:28 字數 1353 閱讀 4741

c風格的型別轉換c++完全相容。

c++新增了四個顯式型別轉換運算子。

1)靜態型別轉換:static_cast《目標型別》

a.將基類的指標或引用轉換為子類的指標或引用;

b.自定義型別轉換。

它允許子類型別的指標轉換為父類型別的指標(這是乙個有效的隱式轉換),同時,也能夠執行相反動作:轉換父類為它的子類,但會給出編譯警告

下面的例子中,被轉換的父類沒有被檢查是否與目的型別相一致。

class base {};

class derived : public base {};

base *a = new base;

derived *b = static_cast

(a); //子類的指標指向父類的物件

基礎型別之間的標準轉換:

double d = 3.14159265;

int i = static_cast

(d);

2)動態型別轉換:dynamic_cast《目標型別》

將基類的指標或引用轉換為子類的指標或引用,在執行期檢查基類指標或引用的目標物件是否真的是所要轉換的子類型別。保證了「安全的向下轉型(safe downcasting)」

它允許任意的隱式型別轉換(基類指標指向子類)以及相反過程。不過,與static_cast不同,在後一種情況裡(注:即隱式轉換的相反過程),dynamic_cast會檢查操作是否有效。

檢測在執行時進行。如果被轉換的指標不是乙個被請求的有效完整的物件指標,返回值為null.

**:

class base  };

class derived : public base {};

base* b1 = new derived;

base* b2 = new base;

derived* d1 = dynamic_cast

(b1); //succeeds

derived* d2 = dynamic_cast

(b2); // fails: returns 'null',在子類的指標看來,基類的物件是不完整的。bad_cast的異常型別被丟擲

3)常量型別轉換:const_cast《目標型別》

去除或新增指標或引用的常屬性。

4)重解釋型別轉換:reinterpret_cast《目標型別》

a.任意型別的指標或引用之間進行轉換;

b.在指標和整數之間進行轉換。

a * a = new a;

b * b = reinterpret_cast(a);

cpp四種型別轉換

static cast 用法 static cast type id expression 該運算子把expression轉換為type id型別,但沒有執行時型別檢查來保證轉換的安全性。它主要有如下幾種用法 用於類層次結構中基類和子類之間指標或引用的轉換。進行上行轉換 把子類的指標或引用轉換成基類...

Cpp深入 引用型別

1.如何從建立引用?2.引用型別初始化 3.更改別名?4.一般性的準則 1.如何建立引用?cpp中引用通過typename 實現建立,如下 int a 10 int alias a 2.引用型別初始化 引用型別需要在建立之初初始化,否則編譯器將報錯 int a 10 必須初始化,否則報錯 int a...

類型別(下) 譚浩強cpp

為了解決這個問題,c 提供了建構函式 constructor 來處理物件的初始化。不帶引數的建構函式 類名 在函式體中對資料成員賦初值。這種方式使該類的每乙個物件都得到同一組初值。帶引數的建構函式 類名 型別 1 形參1,型別2 形參2,呼叫不同物件的建構函式時,從外面將不同的資料傳遞給建構函式,以...