-2

如果您有从 A 类继承的 B 类,则下面打印的两个值可能不同。为什么?

B *myPointer = new B();
A *myOtherPointer = myPointer;

printf(“%x”, myPointer);
printf(“%x”, myOtherPointer);
4

1 回答 1

2

下面打印的两个值可能不同。为什么?

假设这A是一个基数,B因此分配有效,它可能不是唯一的基数B(特别是它可能不是第一个基数),在这种情况下会有一个偏移量:

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)) );
}
于 2012-06-11T15:20:55.913 回答