通过void *和reinterpret_cast从字节字段读取

时间:2015-04-17 13:44:06

标签: c++ pointers void-pointers reinterpret-cast

我计划从T以下列方式给出的字节字段中读取类型void*

template <class T>
T read(void* ptr){
    return reinterpret_cast<T>(*ptr);
}

但我有些疑惑:void*取消引用reinterpret_cast<T>实际上是什么?T?只是那个位置的字节?或者&#39;神奇地&#39;一个长度为void*的字节序列?我应该先将T*投射到{{1}}吗?

1 个答案:

答案 0 :(得分:5)

您不能取消引用void指针,它不指向对象。但C标准要求:

  

指向void的指针可以转换为指向任何对象类型的指针。

我们可以先将ptr转换为T*,然后将转换为取消引用它:

template <class T>
T read(void* ptr) {
    return *static_cast<T*>(ptr);
}