对于哪些类别的类型(标准布局,POD,普通类型,对齐约束......),以下假设是否有效?
B
是A
的子类,B* b
是指向B
对象的指针。
A* a = b
的地址与b
相同,即
static_cast<A*>(b) == reinterpret_cast<A*>(b)
B bs[n]
是B
个对象的数组。
&bs[i] == static_cast<B*>(reinterpret_cast<unsigned char*>(bs) + i * sizeof(B))
offsetof
可用于从A
访问B
和b
的数据成员:
int i = *static_cast<int*>(
reinterpret_cast<unsigned char*>(b) + offsetof(B, m_i));
编辑:将void*
更改为unsigned char*
以进行指针运算(以1个字节为单位)
答案 0 :(得分:4)
如果A
和B
都是标准布局,b
指向类B
的派生程度最高的对象,则第一个断言应为true。< / p>
offsetof
宏可用于标准布局类型的成员。
对于任何类型B
,问题的第二点都是正确的,因为这就是数组的定义方式。