例如,我有一些类层次(可能的话,有各类继承 - 公共,私有,公有虚,多继承等):什么时候可以比较指向C++中相同对象的指针?
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;
这两个指针可以用来比较相等性(operator ==)和为什么? 比较会使用增量逻辑还是其他技术?
当我无法比较指向同一个复杂对象的指针时,有什么可能的情况? 它可以是什么样的对象?
我想,所有指向同一对象的指针总是相等的。
*为什么要比较它们,这就是问题。 – Jon 2012-03-30 12:49:03
指针只是地址,如果你想比较任何东西,它可以是指针指向的对象,你不能比较两个地址,并判断这些位置上的对象是否相等。很好,错误......你可以。 ..但那是错误的。 – 2012-03-30 12:51:17
@Als:如果我做了'std :: cout <<(e == b)<<“”<< e <<“”<< b << std :: endl;',它会打印'1 0x1aaa020 0x1aaa030' 。所以地址是不同的,但指针是平等的。整个问题是关于这种比较的常见C++规则。 – 2012-03-30 12:58:50