C 四種強制型別轉換

2021-09-22 18:28:50 字數 1878 閱讀 1694

c++強制型別轉換

在c++語言中有四個關鍵字static_cast、const_cast、reinterpret_cast、dynamic_cast用於強制型別轉換。

1、static_cast

在c++中static_cast用於資料型別的強制轉換,強制將一種資料型別轉換為另一種資料型別。例如將整型資料轉換為浮點型資料。

【c語言所採用的型別轉換方式】

int a = 10;

int b = 3;

double result = (double)a / (double)b;

【static_cast關鍵字的使用】

int a =10;

int b = 7;

double result = static_cast(a) / static_cast(b);

static_cast用法:

static_cast《型別說明符》(變數或表示式)

(1)用於類層次結構中基類和派生類之間指標或引用的轉換

進行上行轉換(把派生類的指標或引用轉換成基類表示)是安全的

進行下行轉換(把基類的指標或引用轉換成派生類表示),由於沒有動態型別檢查,是不安全的

(2)用於基本資料型別之間的轉換,如把int轉換成char。

(3)把空指標轉換成目標型別的空指標

(4)把任何型別的表示式轉換成void型別

注意:static_cast不能轉換掉expression的const、volatile屬性

2、const_cast

const限定符用來限定變數,用於表示該變數的值不能被修改。

const_cast則正是用於強制去掉這種不能被修改的常數特性,但需要注意的是const_cast不是用於去除變數的常量性,而是去除指向常數物件的指標或引用的常量性,其去除常量性的物件必須為指標或引用。

const_cast用法:

const_cast(expression)

該運算子用來修改型別的const或volatile屬性。除了const或volatile修飾之外,type_id和expression的型別是一樣的。

常量指標被轉化為非常量指標,並且仍然指向原來的物件;

常量引用被轉換成非常量引用,並且仍然指向原來的物件;常量物件被轉換成非常量物件。

3、reinterpret_cast

reinterpret_cast主要有三種強制型別轉換用途:改變指標或引用的型別、將指標或引用轉換為乙個足夠長度的整型、將整型轉換為指標或引用型別。

reinterpret_cast用法

reinterpret_cast(expression)

type_id必須是乙個指標、引用、算術型別、函式型別或者成員指標。

它可以把乙個指標轉換成乙個整數,也可以把乙個整數轉換成乙個指標(先把乙個指標轉換成乙個整數,再把該整數轉換成原型別的指標,還可以得到原先的指標值)。

int *a  = new int;

double *d = reinterpret_cast(a);

將整型指標通過reinterpret_cast強制轉換成了雙精度浮點型指標。

reinterpret_cast可以將指標或引用轉換成乙個足夠長度的整型,此中的足夠長度取決於作業系統。

4.dynamic_cast

用法:dynamic_cast(expression)

(1)其他三種都是編譯時完成的,dynamic_cast是執行時處理的,執行時要進行型別檢查。

(2)不能用於內建的基本資料型別的強制轉換

(3)dynamic_cast進行轉換的,基類中一定要有虛函式,否則編譯不通過。

類中存在虛函式,就說明它有想要讓基類指標或引用指向派生類物件的情況,此時轉換才有意義。

C 四種強制型別轉換

c風格的強制型別轉換 type cast 很簡單,不管什麼型別的轉換統統是 type b type a c 風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。const cast,字面上理解就是去const屬性。static cast,命名上理解是靜態型別轉換。如int轉換成char。dy...

C 四種強制型別轉換

1 概述 去const屬性用const cast。基本型別轉換用static cast。多型類之間的型別轉換用daynamic cast。不同型別的指標型別轉換用reinterpreter cast。2 詳解加示例 a const cast 用法 const cast 型別 表示式 用途 刪除con...

C 四種強制型別轉換

c風格的強制型別轉換 type cast 很簡單,不管什麼型別的轉換統統是 type b type a c 風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。const cast,字面上理解就是去const屬性。static cast,命名上理解是靜態型別轉換。如int轉換成char。dy...