在非多态类型的情况下,dynamic_cast<void*> 是否保证有效(即等于 static_cast<void*>)?
Is a dynamic_cast<void*> guaranteed to work (i.e. be equal to static_cast<void*>) in the case of a non-polymorphic type?
自从阅读 this question 后我知道 dynamic_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?";
}
此代码 doesn't compile 因此不会产生任何值,无论是否明确定义。它与
冲突
[expr.dynamic.cast]/6 Otherwise, v
shall be a pointer to or a glvalue of a polymorphic type.
自从阅读 this question 后我知道 dynamic_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?";
}
此代码 doesn't compile 因此不会产生任何值,无论是否明确定义。它与
冲突[expr.dynamic.cast]/6 Otherwise,
v
shall be a pointer to or a glvalue of a polymorphic type.