C 中的顯式轉換

2021-09-30 04:26:00 字數 963 閱讀 1056

顯式轉換也成為強制轉換(cast), 有如下幾種型別:static_cast, dynamic_cast, const_cast, reinterpret_cast。

1. const_cast: 將轉換掉表示式的const性質。

const char *pc_str;

char *pc = string_copy( const_cast(pc_str) );

2.  static_cast: 編譯器隱式執行的任何型別轉換都可以由static_cast顯示完成。

double d = 97.0;

char ch = static_cast(d);

3.  reinterpret_cast 通常為運算元的位模式提供較低層次的重新解釋。為了安全地使用reinterpret_cast,要求程式設計師完全理解所涉及的資料型別,以及編譯器實現強制型別轉換的細節。

int *ip;

char *pc = reinterpret_cast(ip);

在這裡要注意,雖然強制轉換型別可以通過,但是pc實際上是指向int型物件的指標,並非字元陣列。任何假設pc是普通字元指標的應用,都有可能帶來有趣的執行時的錯誤。比如:

string str(pc)。

4.  dynamic_cast: 將基類型別物件的引用或指標轉換為同一繼承層次中其它型別的引用或指標。這個指標必須是有效的--為0或者指向乙個物件。

與其他強制型別轉換不同,dynamic_cast涉及執行時型別檢查。如果繫結到引用或指標的物件不是目標型別的物件,則dynamic_cast失敗。如果轉換到指標型別失敗,則dynamic_cast返回的值為0;如果轉換到引用型別失敗,則丟擲乙個bad_cast型別的異常。

所以,dynamic_cast操作符一次執行兩個操作。一:首先檢查轉換是否有效。二:實際進行轉換。一般而言,引用或指標所指向的物件的型別在編譯時是未知的(因為「多型」)。因此,dynamic_cast操作符指向的驗證必須在執行時進行。

C 顯式轉換

標準c 包含乙個顯式的轉換語法 static cast 用於 良性 和 適度良性 的轉換,包括不用強制轉換 const cast 用於 const 和 或 volatile 進行轉換 reinterpret cast 轉換為完全不同的意思。為了安全的使用它,關鍵必須轉換回原來的型別。轉換成的型別一般...

C 顯式轉換

任何具有明確定義的型別轉換,只要不包含底層const,都可以使用static cast c primer 更為簡單的解釋就是,使用這個型別轉換符,能夠進行比較自然的轉換,類別相近的轉換,而有一些型別差距明顯的轉換則不可以,例如 不能用於不同型別的指標之間轉換 void 除外 不能用於整型與指標之間的...

C 中的顯式型別轉換

寫c 的時候,有時候不可避免的會使用型別轉換,良好的編碼風格中應該避免隱式轉換,隱式轉換有時候會產生不易察覺的問題。c 提供了四種顯示型別轉換方式,當然顯示的強制型別轉換也是需要盡量避免的。四種顯示轉換具有相同的形式 cast name expression type 是轉換的目標型別 expres...