c++筆記9--型別強轉(type cast)
宣告:本文件由王桂林老師編寫的c++課件,經整理而出。
型別轉換有c風格的,當然還有c++風格的。
c風格的轉換的格式很簡單(typeexpression),但是c風格的型別轉換有不少的缺點,有的時候用c風格的轉換是不合適的,
因為它可以在任意型別之間轉換,比如你可以把乙個指向 const 物件的指標轉換成指向非const 物件的指標, 把乙個指向基類物件的指標轉換成指向乙個派生類物件的指標, 這兩種轉換之間的差別是巨大的,
但是傳統的c語言風格的型別轉換沒有區分這些。還有乙個缺點就是,c風格的轉換不容易查詢,他由乙個括號加上乙個識別符號組成,
而這樣的東西在c++程式裡一大堆。所以c++為了克服這些缺點,引進了新的型別轉換操作符。
靜態型別轉換
語法格式:
static_cast《目標型別》 (識別符號)
轉化規則:
在乙個方向上可以作隱式轉換,在另外乙個方向上就可以作靜態轉換。
int a = 10;
int b = 3;
cout<(a)/b<(q);
char *p = static_cast(malloc(100));
重解釋型別轉換
語法格式:
reinterpret_cast《目標型別》 (識別符號)
轉化規則:
通常為運算元的位模式提供較低層的重新解釋」也就是說將資料以二進位制存在形式
的重新解釋,在雙方向上都不可以隱式型別轉換的,則需要重解釋型別轉換。
int main()
; int *q = reinterpret_cast((reinterpret_cast(a) +1));
printf("%x\n",*q);
return 0;
}
脫常型別轉換
語法格式:
const_cast《目標型別》 (識別符號) //目標類型別只能是指標或引用。
語法規則:
用來移除物件的常量性(cast away the constness)使用 const_cast 去除 const 限定的
目的不是為了修改它的內容,使用 const_cast 去除 const 限定,通常是為了函式能夠接受這個實際引數。
應用場景:
#include using namespace std;
void func(int & ref) //別人己經寫好的程式或類庫
動態型別轉換
語法格式:
dynamic_cast《目標型別》 (識別符號)
用於多型中的父子類之間的強制轉化。
9型轉x型 cobol COBOL 資料型別
資料部 data division 是用來定義程式中使用的變數。為了描述cobol中的資料,必須了解以下術語 data name 資料名稱 level number 級數 picture clause 子句 value clause 值子句 01 total students pic9 5 valu...
C 筆記5型別轉換
以下 的開頭 include using namespace std c 型別轉換 原始型別轉換,所有情況都是一種寫法,可讀性不高,有可能有潛在的風險 void func int type case 2 default void func2 char c p void main void func ...
swift 9 型別轉換
型別轉換可以判斷例項的型別,也可以將例項看做是其父類或者子類的例項。型別轉換在 swift 中使用 is 和 as 操作符實現。這兩個操作符提供了一種簡單達意的方式去檢查值的型別或者 轉換它的型別。你也可以用它來檢查乙個類是否實現了某個協議。你可以將型別轉換用在類和子類的層次結構上,檢查特定類例項的...