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...