[英]When is a `static_cast<Base*>(static_cast<void*>(derived))` from a pointer to a derived class valid?
[英]What happens when static_cast from derived class to base class?
在閱讀C ++標准時,我讀到static_cast
是一種直接初始化 (C ++標准8.5 / 15)。
我認為這意味着在static_cast
期間,會調用相應的重載構造函數 。
例如,存在從B導出的類型B和類型D,以及對象D d
。 然后表達式static_cast<B>(d)
是static_cast
表達式。
作為標准手段,此static_cast
表達式是直接初始化 。 這是否意味着這將調用類的構造函數B
和返回類型的新構造的對象B
?
編輯
另一個問題是B & b = d
或B b = d
怎么樣? 這兩個語句是否涉及B
構造函數?
它們在標准中的含義是您可以將float轉換為整數。 此時轉換將發生。 您可以說此時直接初始化了結果int
。
如果參與轉換的類具有相應的重載轉換,則是,它將被調用。 我個人不建議積極使用此功能。 您的代碼將難以閱讀。
是的,對象類型的static_cast
(即,不是對引用或指針類型的static_cast
轉換)將使用適當的構造函數來創建臨時對象。
不。直接初始化意味着將從類D的對象復制B類對象中的每個字節,而不需要構造函數調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.