c 中的型別轉換

2022-09-05 01:39:10 字數 1276 閱讀 8403

c++中的轉換方法: cast-name(expression)

注意 轉換的時候,就算指標的型別發生變化,編譯器並沒有改變記憶體的內容,原來的指標指向哪兒還是在哪兒,這在有時候會出現一些不可思議的結果

p175

其中 cast-name有四種:static-cast,const-cast,reinterpret-cast,dynamic-cast

1,reinterpret_cast和蔣園括號蔣型別括起來的效果相同

int *ip;

char * pc=(int*)pc;

等價於char * pc =reinterpret_cast(ip)

2,const_cast是唯一可以轉換到表示式const性質的轉換

const

double value=0.0f

;double* pd=const_cast(&value);

3,static_cast的效果類似於編譯器隱式執行的所有型別轉換。

對於基本型別,只有當相互之間可以隱式轉換的時候,static_cast的轉換才是合法的,否則蔣出錯

對於類層次之間的轉換,相對複雜些,參見下面dynamic_cast的介紹

4,dynamic_cast轉換的物件只能是指標或者引用,涉及執行時的型別檢查,需要檢查虛函式表,因此只有對有虛函式表的類才能使用dynamic_cast

dynamic分為兩步執行

1)檢查請求的轉換是否有效,否則返回null(對指標)或者返回異常(對引用)

2)只有轉換有效,才進行檢查

對於類間的上行轉換和下行轉換:

1)進行上行轉換的時候,因為預設就可以進行隱式轉換,因此static_cast和dynamic_cast是等效的

2)進行下行轉換的時候,dynamic_cast比static_cast更安全。

對於單類繼承,如果指標確實指向繼承類的物件,那麼向下轉型時,dynamic_cast比static_cast都可以成功;但是如果指標指向的基類物件,dynamic_cast會報錯,但是static_cast則試圖用基類指標去操作繼承類,是不安全的。

對於多繼承,如果指標確實指向繼承類的物件,那麼向下轉型時,dynamic_cast比static_cast都可以成功;但是如果指標指向的基類物件,dynamic_cast會報錯,但是static_cast則試圖用基類指標去操作繼承類,是不安全的。但是蔣宣告時的基類指標轉換到其兄弟類的時候,dynamic_cast可以成功,然而static_cast則不能編譯,除非先轉換為繼承類再轉換為兄弟基類

C 中的型別轉換

和goto語句一樣型別轉換的名聲似乎也是不那麼好。不過型別轉換在某些緊要關頭就顯得尤為重要,看看現有的c c 就知道,以至於你不理解轉換的作用,將是無法閱讀的。就像鈾,它能變成原子彈,但它也能用來發電,是災難還是福祉那就要看人類了。顯然型別轉換默默承受著這不公的一切。不管怎麼說c風格的型別轉換還是不...

C 中的型別轉換

1.隱式轉換 1 賦值轉換 將右值轉換為左型別,然後再賦值。2 整型提公升 c 將bool char,unsigned char,singned char,short轉換為int,int計算最快 表示式中的優先順序轉換 long double double float unsigned long 對...

C 中的型別轉換

我們知道 變數的型別定義了物件能包含的資料和參與的運算。其中一種運算被大多數型別支援,就是將變數從某一種給定的型別轉化為另外的型別。在了解型別轉換種類之前,首先牢記 型別轉換只是暫時的,原來的變數型別並不改變。在c語言中,分為兩種型別轉換 1,隱式型別轉換 2,顯示型別轉換 例如 double d ...