static_cast在功能上基本上與C風(fēng)格的類型轉(zhuǎn)換一樣強大,含義也一樣。它也有功能上限制。例如,你不能用static_cast象用C風(fēng)格的類型轉(zhuǎn)換一樣把struct轉(zhuǎn)換成int類型或者把double類型轉(zhuǎn)換成指針類型,另外,static_cast不能從表達式中去除const屬性,因為另一個新的類型轉(zhuǎn)換操作符const_cast有這樣的功能。
const_cast用于類型轉(zhuǎn)換掉表達式的const或volatileness屬性。通過使用const_cast,你向人們和編譯器強調(diào)你通過類型轉(zhuǎn)換想做的只是改變一些東西的constness或者 volatileness屬性。這個含義被編譯器所約束。如果你試圖使用const_cast來完成修改constness 或者volatileness屬性之外的事情,你的類型轉(zhuǎn)換將被拒絕。
dynamic_cast它被用于安全地沿著類的繼承關(guān)系向下進行類型轉(zhuǎn)換。這就是說,你能用dynamic_cast把指向基類的指針或引用轉(zhuǎn)換成指向其派生類或其兄弟類的指針或引用,而且你能知道轉(zhuǎn)換是否成功。失敗的轉(zhuǎn)換將返回空指針(當(dāng)對指針進行類型轉(zhuǎn)換時)或者拋出異常(當(dāng)對引用進行類型轉(zhuǎn)換時)。
reinterpret_cast。使用這個操作符的類型轉(zhuǎn)換,其的轉(zhuǎn)換結(jié)果幾乎都是執(zhí)行期定義(implementation-defined)。因此,使用reinterpret_casts的代碼很難移植。reinterpret_casts的最普通的用途就是在函數(shù)指針類型之間進行轉(zhuǎn)換。