读书人

static_cast的变换

发布时间: 2012-11-04 10:42:42 作者: rapoo

static_cast的转换

C/C++ code
class A { public: int m_a; int m_b; void hh(){}}; class B { public: int m_b; void BB(){}}; class C : public B, public A {int ii;};C c; printf("%p, %p, %p\r\n", &c, static_cast<B*>(&c), static_cast <A*>(&c));


为什么打印结果,前面两个相等呢?

后面一个偏移4个字节?

是不是要关于类的继承了?????




[解决办法]
这个跟static_cast转换没有关系,涉及到的相关知识点是多重继承的指针偏移,LZ可以去自行搜索下,找相关的资料仔细看一下
[解决办法]
你好,我们又见面了。

1,看《C++对象模型》
2.了解一下static_cast。
[解决办法]
跟继承顺序有关
C/C++ code
class C : public B, public A {int ii;};
[解决办法]
C/C++ code
与继承有一定的关系,会出现这种情况是因为你继承的时候是先继承的class B,所以对象c的首地址应该是c.B::m_b的地址,将c的地址转换为B类型后,由于class B 只有m_b 元素,所以其地址也应该是c.B::m_b的地址。再说将c的地址转换为A类型后,class A 内存在m_a 和 m_b 元素,所以其地址应该是c.A::m_a。在栈中给对象c分配内存的顺序:c.B::m_bc.A::m_ac.A::m_bc.ii这也就是static_cast <A*>(&c))向后偏移了4个字节的原因 

读书人网 >C++

热点推荐