2016-10-23 20 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。

相关问题