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

时间:2012-10-15 06:54:41

标签: c++ pointers multiple-inheritance

示例:

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

C c;
A* a = &c;
B* b = &c;

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

1 个答案:

答案 0 :(得分:12)

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