2016-10-23 61 views
2

我知道自從this question認爲dynamic_cast<void*>是檢查對象指針的真實身份並確保任何基本指針也將等值地與最大派生(在強制轉換後)進行比較的最佳方法。dynamic_cast <void*>保證在非多態類型的情況下工作(即等於static_cast <void*>)?

我不確定的是,這個演員在非多態情況下給出了定義和有用的結果。如果沒有,我可以解決這個問題還是這是一個無望的情況?

什麼我問的是,如果這是明確的:

class A {}; 
class B : public A {}; 

int main() 
{ 
    A a; 
    B b; 
    A* base_ptr = &b; 

    void* pointer = dynamic_cast<void*>(&a); // is this value well-defined? 

    if(dynamic_cast<void*>(&b) == dynamic_cast<void*>(base_ptr)) 
    std::cout << "Is this undefined or not?"; 
} 

回答

3

此代碼doesn't compile,因此不會產生任何價值,明確或以其它方式。它運行相抵觸的

[expr.dynamic.cast]/6否則,v應的指針或一個多態型的一個glvalue。

相關問題