例如,我有一些类层次结构(可能具有各种继承 - 公共、私有、公共虚拟、多重继承等):
class A {
int a;
public:
virtual ~A() {}
};
class B: public A { int b; };
class C: public virtual B { int c; };
class E: public virtual B { int e; };
class F: public C, public E { int f; };
使用强制转换,我可以获得指向主“大”对象的每个子对象的指针:
F * f = new F;
E * e = f;
C * c = f;
B * b = f;
A * a = f;
我可以比较哪些指针对是否相等(运算符==),为什么?
比较会使用增量逻辑或其他技术吗?
当我无法比较指向同一复杂对象的指针时,可能会出现哪些情况?
它可以是什么样的物体?
我期望指向同一对象的所有指针始终相等。
如果一种指针类型可以隐式转换为另一种类型,则可以比较两个指针;也就是说,如果它们都指向同一类型,或者一个指向另一个的基类。转换将对地址进行必要的调整,以便如果两个指针都指向同一个对象,则它们将比较相等。
在这种情况下,您可以比较任何对,除了c == e
,因为都没有C
nor E
是从对方派生出来的。要比较它们,您要么需要交叉转换,要么将它们转换为它们的公共基类;这些都不能隐式完成。
顺便说一句,没有必要dynamic_cast
在您的代码中,因为您正在转换为基类指针,并且可以隐式完成安全转换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)