5.2.7/7的大意是:
如果
T
为“指向cv void
的指针”,则结果是指向x
所指向的最派生类的指针。
这个语法有什么好的应用场景?什么情况下应该使用dynamic_cast<void*>
呢?
5.2.7/7的大意是:
如果
T
为“指向cv void
的指针”,则结果是指向x
所指向的最派生类的指针。
这个语法有什么好的应用场景?什么情况下应该使用dynamic_cast<void*>
呢?
一个常见的原因是确定两个接口 IA*
和 IB*
是否实际上是指向同一基础对象的指针。如果需要这样做,请使用类型转换。
如果存在多重继承并具有重复的非虚拟基类,在两个IA*
指针比较不相等但指向同一对象的情况下也是可能的,因为它们指向两个不同的 IA
子对象。
dynamic_cast<void*>(ptr)
和static_cast<void*>(ptr)
之间有什么区别(因为void*
没有任何RTTI或虚表)。 - Basile Starynkevitchptr
是指向类类型的指针,因此它可以具有 RTTI。 - Oktalistvoid*
是一个通用指针,因此没有任何RTTI,我个人认为。 - Basile Starynkevitchstatic_cast<void*>
可能会给您一个指向完整对象中间某个基类的指针,这可能不是唯一的。 - MSalters当你有这样的内容:
template<typename X, typename Y>
bool operator==(const X* px, const Y* py) {
return dynamic_cast<void*>(px) == dynamic_cast<void*>(py);
}
return
吗? - Morwennconst
。 - Oktalist