C 中4種型別轉換方式

2021-07-29 22:28:00 字數 1609 閱讀 7325

首先型別轉換,比如以下**

int i;

double d = 12.0;

i = (int)d;

但是這種強制轉換符對於類和類的指標來說,就比較麻煩,所以c++標準定義了四個新的轉換符:

轉換乙個指標為其他型別的指標,也允許乙個指標轉換為整數型別,反之亦然

#include 

using

namespace

std;

class a

};class b

};int main()

執行結果如下:

允許任意的隱式轉換和相反轉換動作(即使它是不允許隱式的),比如類上,它允許這樣兩個操作:(1)子類型別的指標轉換為父類型別的指標(這個是有效的隱式轉換),(2)轉換父類的指標為子類指標(隱式操作是不允許的),當然也可以用在基礎型別轉換上,這裡與dynamic_cast做對比

#include 

using

namespace

std;

class a

};class b:public a

};int main()

結果如下:

只能用於物件的指標和引用,用於多型的時候允許任意的隱式型別以及反轉過程(它這裡與static_cast不同的地方就值,在反轉過程的時候會檢查操作是否有效,無效返回null),具體**如下:

#include 

using

namespace

std;

class a

};class b:public a

};int main()

if (b2 != null)

system("pause");

}

在實現的過程中,發現如果類沒有包含多型型別會報錯

說這個之前先說一下const物件的指標問題

const

int* p;

int a = 10;

p = &a;

//*p = 20; 不允許

a = 20;

這裡說的是p本身可以修改,但是p指向的內容不能通過p來修改

int c=20;

int *const p=&c;

而這樣定義,則是p本身是const,指向的內容可以修改。

簡單一句話來說,const在*後面就是指標本身是const,const在*前面就是指向的內容不允許通過指標修改

而const_cast就是改變這個性質,**如下

#include 

using

namespace

std;

class a

void hello()

int aa;

};int main()

執行結果

C 中4種 型別轉換 方式

dynamic cast var reinterpret cast var static cast var const cast var 1 執行時,檢查轉換 2 基類中一定要有虛函式 不能用於基礎型別 否則編譯不通過 3 成功的話返回的是指向類的指標或引用,轉換失敗的話則會返回null 更多請檢視...

C 的4種型別轉換方式

型別轉換有c風格的,當然還有c 風格的。c風格的轉換的格式很簡單 type expression,但是c風格的型別轉換有不少的缺點,有的時候用c風格的轉換是不合適的,因為它可以在任意型別之間轉換,比如你可以把乙個指向const物件的指標轉換成指向非const物件的指標,把乙個指向基類物件的指標轉換成...

比較C 中的4種型別轉換方式

ansi c 標準定義了四個新的轉換符 reinterpret cast static cast dynamic cast 和 const cast 目的在於控制類 class 之間的型別轉換。reinterpret cast expression dynamic cast expression s...