1
可能重複:
c-style cast vs reinterpret_cast的reinterpret_cast對C風格的轉換
之間有什麼區別:
A* pA = new B;
B* p1 = (B*)pA;
B* p2 = reinterpret_cast<B*>(pA);
他們在做同樣的事情的兩個相同的方法呢?有沒有什麼理由選擇一個呢?應該在C++代碼中避免「C風格」轉換?
可能重複:
c-style cast vs reinterpret_cast的reinterpret_cast對C風格的轉換
之間有什麼區別:
A* pA = new B;
B* p1 = (B*)pA;
B* p2 = reinterpret_cast<B*>(pA);
他們在做同樣的事情的兩個相同的方法呢?有沒有什麼理由選擇一個呢?應該在C++代碼中避免「C風格」轉換?
A C樣式轉換是等同於第一那成功以下的:
const_cast
static_cast
static_cast
隨後const_cast
reinterpret_cast
reinterpret_cast
後面跟着const_cast
因此,在某些情況下,C風格演員陣容的效果與reinterpret_cast
相同,但它們不相同。由於C風格演員基本上是「哦,只是施放它,但是你可以」施放,所以最好選擇更具體的演員陣容。
對於您的示例,最好使用static_cast
,因爲您知道派生對象的實際類型。當你不這樣做時,使用dynamic_cast
。
'reinterpret_cast'不是正確的演員。 – chris