例如,我有一些类层次结构(可能具有各种继承 - 公共,私有,公共虚拟,多继承等):
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; };
Run Code Online (Sandbox Code Playgroud)
使用强制转换我得到指向主"大"对象的每个子对象的指针:
F * f = new F;
E * e = f;
C * c = f;
B * b = f;
A * a = f;
Run Code Online (Sandbox Code Playgroud)
我可以比较这些指针的哪些对等(运算符==)和为什么?比较是否会使用delta逻辑或其他技术?
当我无法比较指向同一复杂对象的指针时,有哪些可能的情况?它可以是什么样的物体?
我希望,所有指向同一对象的指针总是相等的.
如果一种指针类型可以隐式转换为另一种类型,则可以比较两个指针;也就是说,如果它们都指向同一类型,或者一个指向另一个的基类。转换将对地址进行必要的调整,以便如果两个指针都指向同一个对象,则它们将比较相等。
在这种情况下,您可以比较除 之外的任何对c == e,因为 和 都不C是E从另一个派生的。要比较它们,您要么需要交叉转换,要么将它们转换为它们的公共基类;这些都不能隐式完成。
顺便说一句,您的代码中不需要dynamic_cast,因为您正在转换为基类指针,并且可以隐式完成安全转换。
| 归档时间: |
|
| 查看次数: |
722 次 |
| 最近记录: |