以下代码运行结果是:
0x55c9167f3e70
0x55c9167f3e78
0x55c9167f3e70
如以下代码所示,A类分别继承B和 C,进行static cast的时候,A指针的地址只会和B对齐,而和C差8个字节。原因是IOpAttrs 内包含虚函数,而虚函数表会占8个字节。
通常地,A:B,C, A的地址和B相同,和C差sizeof(B)字节
class B {
public:
virtual ~B() = default;
protected:
B() = default;
};
class C {
public:
virtual ~C() = default;
protected:
C() = default;
};
class A: public B,
public C{
public:
A() = default;
private:
int input_ = 0;
};
int main() {
auto a = new A;
printf("%p\t", a);
auto c = static_cast<C*>(a);
printf("%p\t", c);
auto b = static_cast<B*>(a);
printf("%p\t", b);
delete a;
return 0;
}
//g++ test.cpp -o test