示例:
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时,它们是相同的,为什么会这样?
答案 0 :(得分:12)
在表达式&c == b
中,两个操作数必须被强制转换为相同的类型。在这种情况下,&c
(a C*
)可以转换为B*
,因为B
是C
的可访问基类。这与B* b = &c
中的转换完全相同,因此结果值相同,比较返回true。