【发布时间】:2020-11-14 14:26:58
【问题描述】:
如何安全地将无符号整数值(例如uint32_t、uint64_t)转换为特定类型的指针?
例如我有:
using my_uint32_t = unsigned int;
using my_uint64_t = unsigned long long;
struct Sample {
my_uint32_t address;
my_uint64_t address_64;
};
Sample sample; /* Just for reference here */
struct TargetStruct {
/* Some member variables goes here */
...
};
目标是访问分别存在于Sample.address 或Sample.address64 的TargetStruct 类型的对象。
我尝试使用:
TargetStruct * target = reinterpret_cast<TargetStruct *>( sample );
它有效,但安全吗?我知道规则说reinterpret_cast 应避免不安全,但有没有其他方法可以使其安全?
我无法查看我的“输入”——Sample 结构和它的内容——它只是简单地给出,但我必须以这种安全的方式使用存储在其中的数据......
我正在使用 C++20,所以我将避免使用 C 风格的强制转换...
【问题讨论】:
-
使用
std::uintptr_tfrom<cstdint>
标签: c++ pointers casting type-conversion c++20