dynamic_cast <void*>什么时候有用?

0x4*_*2D2 24 c++ dynamic-cast casting void-pointers c++11

5.2.7/7说的内容如下:

如果T是"指向cv void",则结果是指向由其指向的派生类最多的指针x.

这个synatx有什么好的应用?什么时候应该dynamic_cast<void*>使用?

MSa*_*ers 26

一个常见原因是要弄清楚是否两个接口IA*IB*实际上指向同一个底层对象.如果需要,请使用演员表.

IIRC,甚至可能在多重继承的情况下,重复的非虚拟基数有两个IA*指针比较不相等,但指向同一个对象 - 因为它们指向两个不同的IA子对象.

  • @BasileStarynkevitch:这可以防止将_back_转换为原始类型.为了解决你的第一个注释,`static_cast <void*>`可能会给你一个指向完整对象中间某个地方的基类的指针,它可能不是唯一的. (2认同)

Pau*_*ans 5

当你有类似的东西:

template<typename X, typename Y>
bool operator==(const X* px, const Y* py) {
     return dynamic_cast<void*>(px) == dynamic_cast<void*>(py);
}
Run Code Online (Sandbox Code Playgroud)