C++ 关于对象内存布局的假设
以下假设对哪些类型(标准布局、POD、普通类型、对齐约束等)有效C++ 关于对象内存布局的假设,c++,c++11,c++14,C++,C++11,C++14,以下假设对哪些类型(标准布局、POD、普通类型、对齐约束等)有效 B是a的子类,B*B是指向B对象的指针 A*A=b与b具有相同的地址,即 static_cast<A*>(b) == reinterpret_cast<A*>(b) offset of可用于从B访问A和B的数据成员: int i = *static_cast<int*>( reinterpret_cast<unsigned char*>(b) + offsetof(B,
B
是a
的子类,B*B
是指向B
对象的指针
A*A=b
与b
具有相同的地址,即
static_cast<A*>(b) == reinterpret_cast<A*>(b)
offset of
可用于从B
访问A
和B
的数据成员:
int i = *static_cast<int*>(
reinterpret_cast<unsigned char*>(b) + offsetof(B, m_i));
inti=*静态(
重新解释(b)+偏移(b,m_i));
编辑:将指针算法的
void*
更改为unsigned char*
(以1字节为单位)如果A
和B
都是标准布局,并且B
指向类B
的最派生对象,则第一个断言应为真
offsetof
宏可用于标准布局类型的成员
问题的第二点适用于任何类型的B
,因为数组就是这样定义的
int i = *static_cast<int*>(
reinterpret_cast<unsigned char*>(b) + offsetof(B, m_i));