gpt4 book ai didi

C++ offsetof char* 算法

转载 作者:可可西里 更新时间:2023-11-01 15:26:12 24 4
gpt4 key购买 nike

this answer , int8_t* 用于(字节)指针运算:

std::size_t offset = offsetof(Thing, b);
Thing* thing = reinterpret_cast<Thing*>(reinterpret_cast<int8_t*>(ptr) - offset);

我过去一直使用 char* 但评论真的很困惑,没有人回应,所以我发布了这个单独的问题。

char* 是否有效,以及进行这些计算的首选方式?

最佳答案

必须使用char*:在指针上使用reinterpret_castint8_t* 时的行为不是 int8_t 的东西是 undefined。转换为 char* 可以被视为规则的异常(exception)。

Pre C++14,char 可以是范围为 -127 到 +127 的 1 的补码类型。 int8_t 必须是 2 的补码。即使是 C++14 及以后的版本,我也看不出为什么这些类型是相关的:char 仍然可以是有符号或无符号类型。

关于C++ offsetof char* 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33872140/

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