C 型別轉換

2021-06-16 16:53:42 字數 2170 閱讀 6753

c++的強制型別轉化用於不同的情況和原因,比c進步的是c++將這些情況細分並用不同的強制型別轉換符號來表示。這樣程式就比c更容易解析。

命名的強制型別轉換符號的一般形式如下:

cast-name(expression);

其中cast-name為static_cast、dynamic_cast、const_cast、reinterpret_cast之一,type為

換的目標型別,而expression則是被強制轉換的值。

編譯器隱式執行的任何型別轉換都可以由static_cast顯示完成,也就是說一般的型別轉換都是使用static_cast比較好。static_cast基本上擁有與c舊式轉換相同的威力與意義,以及相同的限制。例如你不能夠利用static_cast將乙個struct轉型為int,或者將乙個double轉型為pointer。

const_cast就是用來轉換表示式的const性質。例如: constchar *pc_str; const_cast(pc_str); 類似地,除了新增或者刪除const特性,用const_cast符來執行其他任何型別轉換,都會引起編譯錯誤。

reinterpret_cast通常為運算元的位模式提供較低層次的重新解釋。reinterpret_cast本質上依賴於機器。為了安全使用reinterpret_cast,要求程式設計師完全理解所涉及的資料型別,以及編譯器實現強制型別轉換的細節。由於reinterpret_cast與編譯平台相關,所以不具備可移植性。至今我都沒有講過reinterpret_cast的例子程式。用的很少也不建議使用。

5.1type_info

對於這個型別轉化是與c++的riit特性相關的。

首先解釋一下tpye_info結構,c++中各個型別(無論是內建型別還是自定義型別)的資訊都由各自的type_info來描述。這裡從vc++的typeinfo.h中找到vc++版本下的type_info定義:

class type_info ;
以下的一段程式測試了tpyeid(取得型別的type_info結構)的功能:

#include#includeusing namespace std;

class b{};

class d:public b{};

int main()

; int*p=&vint;

int**p2p=&p;

int*parr[2]=;

int(*p2arr)[2]=&arr;

//測試組2

b*pb=new b;

d*pd=new d;

b*pbd=new d;

//測試組1結果

cout<

程式的輸出結果為:

這個程式要注意的一點是:

cout <

5.2dynamic_cast功能

dynamic_cast用來執行繼承體系中「安全的向下轉型或跨系轉型動作」。也就是說你可以利用dynamic_cast將「(型別為)指向基類物件的指標」轉型為「(型別為)指向派生類物件的指標」,並得知轉型是否成功。如果轉型失敗會以乙個null指標(當轉型物件是指標)或乙個exception(當轉型物件是引用)表現出來。

#include#includeusing namespace std;

class b

virtualprint()

void pprint(d& d)

int main()

這個程式是異常的。

另外值得注意的是:dynamic_cast只能用於有虛函式的繼承體系中!!!!!!!!

避免使用強制型別轉換,強制型別轉換關閉或者掛起了正常的型別檢查。強烈建議程式設計師避免使用強制型別轉換,不依賴強制型別轉換也能寫出很好的c++程式。這個建議在如何看待reinterpret_cast的使用時非常重要。此類強制型別轉換總是非常危險的。相似地,使用const_cast也總是預示著設計缺陷。設計合理的系統應不需要使用強制型別轉換拋棄const特性。其他的強制型別轉換,如static_cast和dynamic_cast,各有個的用途,但都不應當頻繁使用。每次使用強制轉換前,程式設計師應該仔細考慮是否還有其他不同的方法可以達到同一目的。如果非強制轉換不可,則應限制強制轉換值的作用域,並且記錄所有假定涉及的型別,這樣能減少錯誤發生的機會。

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

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

C 型別轉換

在程式中,進行型別轉換是常見的事。那麼在 c 中支援以前語言的型別轉換方法,即用型別名進行強行轉換,例如 object objtest new newtype newtype newvalue newtype objtest 但是這樣轉換,有個嚴重的問題,就是在把 objtest 強轉換成 newt...

C 型別轉換

型別轉換是將一種型別的值對映為另一種型別的值。型別轉換實際上包含有自動隱含和強制的兩種。型別的自動隱式轉換 c 語言編譯系統提供的內部資料型別的自動隱式轉換規則如下 1.程式在執行算術運算時,低型別可以轉換為高型別。2.在賦值表示式中,右邊表示式的值自動隱式轉換為左邊變數的型別,並賦值給它。3.當在...