这个问题我是在《C++必知必会》条款28里面看到的。C++指针比较的不是地址,而是对象同一性问题。即指针地址可以不同,而比较的结果却相同,因为它们指向的是同一个对象。这个问题用多重继承比较直观:
1: #include
2:
3: using namespace std;
4:
5: class A {
6: int a;
7: };
8:
9: class B {
10: int b;
11: };
12:
13: class C: public B, public A {
14: int c;
15: };
16:
17: int main()
18: {
19: C *pc = new C();
20: A *pa = pc;
21: B *pb = pc;
22: if (pc == pa)
23: {
24: cout << pa << " = " << pc << endl;
25: }
26: if (pc == pb)
27: {
28: cout << pb << " = " << pc << endl;
29: }
30: }
在我机器上运行的结果如下:
0043EF94 = 0043EF90
0043EF90 = 0043EF90
请按任意键继续. . .
由此可以看出,指针比较的不是地址,而是对象同一性。