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

C++: pointer comparison of base vs derived of the same object

本文关键字:派生 指针 比较 对象 C++      更新时间:2023-10-16

example:

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 时,它们是相同的,为什么会这样?

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