2015-04-17 75 views
1

我打算从一个void*给出以下方式字节字段读取类型T阅读*和reinterpret_cast的

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

,但我得到了一些疑惑:什么是解引用void*实际上给进了reinterpret_cast<T>?只是在那个位置的字节?或者'奇迹般'是一个长度为T的字节序列?我应该首先将void*投入T*

回答

5

无法取消引用void指针,它不指向对象。但C标准规定:

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

我们可以先转换ptrT*然后取消对它的引用:

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

不知道与void指针,但当然非常有意义,使!感谢您的回答。 – Michael