C++:指针比较base与同一对象的派生

god*_*amp 10 c++ pointers multiple-inheritance

例:

class A{
    int x;
};
class B{};
class C : public A, public B {};

C c;
A* a = &c;
B* b = &c;
Run Code Online (Sandbox Code Playgroud)

当我检查&c和b的值时,它们是不同的,因为b在内存之后,但是当我评估&c == b时,它们是相同的,为什么会这样?

CB *_*ley 12

在表达式中,&c == b两个操作数都必须被强制转换为相同的类型.在这种情况下,&c(a C*)可以转换B*B可访问的基类C.这与发生的转换完全相同,B* b = &c因此结果值相同,比较返回true.