gpt4 book ai didi

c++ - 对象内存布局的假设

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:51 25 4
gpt4 key购买 nike

对于哪些类别的类型(标准布局、POD、普通类型、对齐约束...),以下假设有效?

BA 的子类,B* b 是指向 B 对象的指针。

  1. A* a = bb 有相同的地址,即

    static_cast<A*>(b) == reinterpret_cast<A*>(b)
  2. B bs[n]B 对象的数组。

    &bs[i] == static_cast<B*>(reinterpret_cast<unsigned char*>(bs) + i * sizeof(B))
  3. offsetof 可用于从 b 访问 AB 的数据成员:

    int i = *static_cast<int*>(
    reinterpret_cast<unsigned char*>(b) + offsetof(B, m_i));

编辑:将 void* 更改为 unsigned char* 用于指针运算(以 1 字节为单位)

最佳答案

如果AB都是标准布局和b指向类 B 的最派生对象, 那么第一个断言应该是真的。

offsetof宏可用于标准布局类型的成员。

问题的第二点对于任何类型都是正确的 B因为这就是数组的定义方式。

关于c++ - 对象内存布局的假设,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34578601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com