11

例子:

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

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

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

4

1 回答 1

13

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

于 2012-10-15T07:08:52.663 回答