如果您的B类继承自A类,则下面打印的两个值可能不同。为什么呢?
B *myPointer = new B();
A *myOtherPointer = myPointer;
printf(“%x”, myPointer);
printf(“%x”, myOtherPointer);
答案 0 :(得分:2)
下面打印的两个值可能不同。为什么呢?
假设A
是B
的基础,以便分配有效,它可能不是B
的唯一基础(特别是它可能不是第一个 base),在这种情况下会有一个偏移量:
struct A { int x; };
struct A_ { int y; }
struct B : A_, A {};
int main() {
B b;
assert( static_cast<void*>(&b) != static_cast<void*>(static_cast<A*>(&b)) );
}
此外,如果继承关系是虚拟的,那么它们也不会从同一地址开始:
struct A {};
struct B : virtual A {};
int main() {
B b;
assert( static_cast<void*>(&b) != static_cast<void*>(static_cast<A*>(&b)) );
}