2013-06-23 70 views
3

在閱讀C++標準時,我讀到static_cast是一種直接初始化(C++標準8.5/15)。
我認爲這意味着在static_cast期間,將調用相應的重載構造函數
例如,存在從B導出的類型B和類型D,以及對象D d。那麼表達式static_cast<B>(d)static_cast表達式。static_cast從派生類到基類時會發生什麼?

作爲標準手段,這static_cast表達式是一個直接初始化。這是否意味着這將調用B類型的構造函數並返回B類型的新構造對象?


編輯
的另一個問題是如何對B & b = dB b = d?這兩個語句是否涉及B的構造函數?

回答

1

是,一個static_cast對象類型(即不轉換爲引用或指針類型)將使用適當的構造函數來創建一個臨時對象。

+0

我編輯了我的帖子來提出另一個問題。你能看看嗎? – Zachary

0

不可以。直接初始化意味着類B的對象中的每個字節都將從類D的對象中複製,而不需要構造函數調用。

+2

不,事實並非如此。在某些情況下'reinterpret_cast'就是這樣做的,但'static_cast'知道類型系統並且尊重它。 –

1

它們在標準中的含義是,您可以將浮點數轉換爲整數。此時轉換將發生。你可以說在這一點上直接初始化產生的int

如果參與鑄造的類有相應的重載轉換,那麼是的,它將被調用。我個人不會推薦積極使用這個功能。你的代碼很難閱讀。

+0

你說得對。我正在考慮重寫。我修改了我的帖子。 –