天天看點

2 盡量使用C++風格的類型轉換

C風格轉換的缺點:

  1. 它們過于粗魯,能允許你在任何類型之間轉換。
  2. C風格的類型轉換在程式中難以識别。

C++風格的類型轉換: static_cast 、const_cast、dynamic_cast和reinterpret_cast C風格的寫法:(type)expression C++風格的寫法:static_cast<type>(expression)

例如,假如你想把一個int轉換成double,C風格的寫法:

int firstNumber,secondNumber;
...
double result = ((double)firstNumber)/secondNumber;
           

C++風格寫法:

double result = static_cast<double>(firstNumber)/secondNumber;
           

這樣的類型轉換不論是人工還是對程式都很容易識别。

static_cast:在功能上和C風格類型轉換一樣強大,含義也一樣,可以被用于強制隐形轉換(例如,non-const對象轉換為const對象,int轉型為double,等等)。 const_cast: 去掉const或volatileness屬性的操作。 dynamic_cast:用于安全的沿着類的繼承關系向下進行類型轉換,失敗的轉換将傳回空指針(針對指針進行類型轉換)或者抛出異常(針對引用進行類型轉換)。 reinterpret_cast:主要是将資料從一種類型的轉換為另一種類型,是特意用于底層的強制轉型,導緻實作依賴(就是說,不可移植)的結果,例如,将一個指針轉型為一個整數。

繼續閱讀