標準的c++提供了四種轉換,static_cast,const_cast,reinterpret_cast,dynamic_cast。雖然有時候確實需要強制轉換,但是它們的本質上是很危險的。
<1>static_cast
編譯器隱式執行的任何型別的轉換都可以由static_cast來完成。它主要用在典型的非強制轉換(比如int->double),窄化(double->int可能丟失資料),使用void *的強制轉換(c++不轉換是不能賦值的),隱式型別變換和類層次的靜態定位。
<2>const_cast
如果從const轉換成非const或從volatile轉換為非volatile可以使用const_cast。這個是它的唯一的作用。
<3>reinterpret_cast
reinterpret_cast通常為運算元的位模式提供較低層次的重新解釋。reinterpret_cast本質上依賴機器,為了安全的使用reinterpret_cast,要求程式設計師完全理解所涉及的資料型別,以及編譯器實現強制型別轉換的細節。
<4>dynamic_cast
安全型別向下進行轉換,當使用dynamic_cast試圖向下型別轉換一種特定的型別,僅當型別轉換是正確的並且是成功的時候,返回值會是乙個指向所需型別的指標,否則返回0.dynamic_cast執行時需要一點額外的開銷,當執行大量的dynamic_cast的時候就會影響到效能了。有的時候進行向下型別轉換的時候如果我們知道正在處理的是何種型別就可以用static_cast代替dynamic_cast而不必執行時檢查。
C 中顯示型別轉換
c 引入了 const cast,reinterpret cast 之類的新的顯式型別轉換方式,不僅大多數 c 程式設計師覺得不是很習慣,就連某些有經驗的c 程式設計師都會在一些細節上犯錯。誠然,既然我們可以簡單的寫出 int i int p p is a pointer 這樣的顯式轉換,為什麼還要...
C 中 explicit顯示轉換
explicit 是避免建構函式的引數自動轉換為類物件的識別符號 cpp view plain copy include using namespace std class a intmain 上面的 編譯不成功,原因是當顯式地定義了乙個帶乙個引數的建構函式 帶explicit 必須要顯示地呼叫建構...
C 中四種顯示型別轉換總結
include usingnamespacestd 四種顯示型別轉換 intmain classfather publicbase father f base ba static cast f reinterpret cast型別轉換 基本型別的指標型別轉換 doublec 12.123 doubl...