例如,我有一些類層次(可能的話,有各類繼承 - 公共,私有,公有虛,多繼承等):什麼時候可以比較指向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