這個問題涉及到我在C++規範中注意到的情況,當時我試圖回答this earlier, intriguing question about C-style casts and type conversions。C++規範是否說明了如何在static_cast/const_cast鏈中選擇類型以用於C風格轉換?
C++規範談到了§ 5.4中的C風格演員。它說,中投符號將嘗試以下鑄件,順序,直到一個發現是有效的:通過const_cast
reinterpret_cast
reinterpret_cast
const_cast
static_cast
static_cast
其次其次是const_cast
。
雖然我意味着什麼使用static_cast
接着是const_cast
一個偉大的直觀的想法(例如,一個const Derived*
到Base*
通過一個const_cast<Base*>(static_cast<const Base*>(expr))
去轉換),我沒有看到任何字眼在說明中,具體說明如何推導static_cast
/const_cast
系列中使用的類型。在簡單指針的情況下並不那麼難,但正如在鏈接問題中所看到的,如果在一個地方引入額外的const
並將其從另一個地方移除,則該投射可能成功。
是否有任何規則來控制編譯器如何確定在鑄造鏈中使用哪些類型?如果是這樣,他們在哪裏?如果不是,這是語言的缺陷,還是有足夠的隱含規則來唯一確定所有可能的演員陣容?