2009-01-24 80 views

回答

23

區別在於(int)foo可以表示六種不同的事物。 它可能是static_cast(在靜態已知類型之間轉換),它可能是const_cast(添加或刪除常量),或者它可能是reinterpret_cast(在指針類型之間轉換)

編譯器嘗試每個直到它找到一個有效的工作。這意味着它可能並不總是選擇你期望的,所以它可能會成爲一個微妙的錯誤來源。

此外,static_cast更容易搜索或搜索/替換。

0

(int)foo與C++ reinterpret_cast<int>比較最多,即對演員表的有效性沒有檢查。

+0

http://www.velocityreviews.com/forums/t280611-reinterpretcastltgt-v-staticcastltgt.html擴展了static_cast和reinterpret_cast之間的區別 – 2009-01-24 10:14:23

7

看什麼Stroustrup has to say about that,包括以下內容:

因爲C風格的類型轉換(T)可以用來表達許多邏輯上不同的操作,則編譯器只趕上濫用最起碼的機會。 [...]

引入了「新風格」,讓程序員有機會更清楚地陳述他們的意圖,並讓編譯器捕捉更多錯誤。 [...]

特別是,C++這種區別static_cast之間reinterpret_cast

的想法是,通過允許的static_cast轉換有點不太可能導致比那些需要reinterpret_cast的錯誤。原則上,可以使用static_cast的結果而不將其重新轉換爲原始類型,而在使用reinterpret_cast的結果以確保可移植性之前,您應該始終將reinterpret_cast的結果轉換回原始類型。

相關問題