我计划从T
以下列方式给出的字节字段中读取类型void*
:
template <class T>
T read(void* ptr){
return reinterpret_cast<T>(*ptr);
}
但我有些疑惑:void*
取消引用reinterpret_cast<T>
实际上是什么?T
?只是那个位置的字节?或者&#39;神奇地&#39;一个长度为void*
的字节序列?我应该先将T*
投射到{{1}}吗?
答案 0 :(得分:5)
您不能取消引用void指针,它不指向对象。但C标准要求:
指向
void
的指针可以转换为指向任何对象类型的指针。
我们可以先将ptr
转换为T*
,然后将转换为取消引用它:
template <class T>
T read(void* ptr) {
return *static_cast<T*>(ptr);
}