,當我們終於寫出這樣 statemnets其中B是從D1在C++中做實際的新對象的創建或類似的基本類型只是簡單的類型轉換完成C++運行時對象的類型轉換或編譯時
派生的類發生D1 d1;
(B)d1;
,當我們終於寫出這樣 statemnets其中B是從D1在C++中做實際的新對象的創建或類似的基本類型只是簡單的類型轉換完成C++運行時對象的類型轉換或編譯時
派生的類發生D1 d1;
(B)d1;
鑄造類型從不會爲它們創建新的實例,但會將鑄造實例的'視圖'視爲您要將其轉換爲的類型。
static_cast
將在編譯時檢查類型是否可轉換。
dynamic_cast
將在運行時檢查類型是可澆注的。
reinterpret_cast
只是在編譯或運行時沒有任何檢查的情況下進行轉換。
類型轉換不會創建新對象,但知道這兩種類型的編譯器可以應用所需的偏移量來將對象解釋爲類型轉換的類型。當然,編譯器或運行時會確保轉換是合法的。
在您的具體情況下,如果您將派生對象投射到基類,則將其稱爲「slicing」,派生零件將從基礎對象中切除。爲了直觀地理解這一點,假設d1有一個內存區域來容納所有這些成員,因爲它來自B,它將有一個子區域來保存它的基類的版本。將d1轉換爲基類時,必須確保該變量僅指代子區域,並忽略其餘部分,換句話說,對象邊界停在基類部分。