C 的型別轉換

2021-10-23 22:26:47 字數 1171 閱讀 6778

型別轉換就是對資料所占用的二進位制位做出重新解釋,如果有必要,在重新解釋的同時還會修改資料,改變它的二進位制位。。

對於隱式型別轉換,編譯器可以根據已知的轉換規則來決定是否需要修改資料的二進位制位;而對於強制型別轉換,由於沒有對應的轉換規則,所以能做的事情僅僅是重新解釋資料的二進位制位,但無法對資料的二進位制位做出修正。這就是隱式型別轉換和強制型別轉換最根本的區別。

隱式型別轉換必須使用已知的轉換規則,雖然靈活性受到了限制,但是由於能夠對資料進行恰當地調整,所以更加安全(幾乎沒有風險)。強制型別轉換能夠在更大範圍的資料型別之間進行轉換,例如不同型別指標(引用)之間的轉換、從 const 到非 const 的轉換、從 int 到指標的轉換(有些編譯器也允許反過來)等,這雖然增加了靈活性,但是由於不能恰當地調整資料,所以也充滿了風險。

static_cast 只能用於良性轉換,這樣的轉換風險較低,一般不會發生什麼意外,例如:

1.原有的自動型別轉換,例如 short 轉 int、int 轉 double、const 轉非 const、向上轉型等;

2.void 指標和具體型別指標之間的轉換,例如void *轉int *、char *轉void *等;

3.有轉換建構函式或者型別轉換函式的類與其它型別之間的轉換。

static_cast 是「靜態轉換」的意思,也就是在編譯期間轉換,轉換失敗的話會丟擲乙個編譯錯誤。

const_cast用來去掉表示式的 const 修飾或 volatile 修飾。

使用 const_cast 進行強制型別轉換可以突破 c/c++ 的常數限制,修改常數的值,因此有一定的危險性。

reinterpret_cast 這種轉換僅僅是對二進位制位的重新解釋,不會借助已有的轉換規則對資料進行調整,非常簡單粗暴,所以風險很高。

dynamic_cast 用於在類的繼承層次之間進行型別轉換,它既允許向上轉型(upcasting),也允許向下轉型(downcasting)。向上轉型是無條件的,不會進行任何檢測,所以都能成功;向下轉型的前提必須是安全的,要借助 rtti 進行檢測,所有只有一部分能成功。

dynamic_cast 與 static_cast 是相對的,dynamic_cast 是「動態轉換」的意思,static_cast 是「靜態轉換」的意思。dynamic_cast 會在程式執行期間借助 rtti 進行型別轉換,這就要求基類必須包含虛函式;static_cast 在編譯期間完成型別轉換,能夠更加及時地發現錯誤。

mysql型別轉換c 型別轉換 C 型別轉換

一 簡介 型別轉換 把資料從一種型別轉換另一種型別 我們要求等號兩邊參與運算子必須型別一致,如果不一致,滿足下列條件會發生自動型別轉換或者隱式型別轉換。1.兩種型別相容 例如 int和double 相容 都是數字型別 2.目標型別大於源型別 double int 顯示型別轉換 1.兩種型別相相容 i...

C 的型別轉換

2008 03 15 12 59 強制型別轉換容易引發錯誤,所以被認為是一種醜陋的語法。c 中有乙個觀念 醜陋的語法就應該用醜陋的方式表達。所以,c 的轉換操作符使用 x cast 這種一種繁瑣的形式。目的是為了讓你在使用型別轉換前三思而行,看看是不是又不需要型別轉換的方法或設計。更重要的是,c風格...

C 型別的轉換

型別的轉換c 中型別轉換 顯隱 的機制分為兩種 一 隱式轉換 implicit conversions 二 顯式轉換 explict conversions 隱式轉換不需要指明欲轉變的型別 顯式轉換明確地使用轉換運算子 cast 指定要轉換成哪一種型別。c 允許程式設計師如果對於溢位進行處理 che...