【问题标题】:Reading from a byte field by void* and reinterpret_cast通过 void* 和 reinterpret_cast 从字节字段中读取
【发布时间】:2015-04-17 13:44:06
【问题描述】:

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

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

但我有一些疑问:取消引用 void* 实际上会给 reinterpret_cast&lt;T&gt; 带来什么?只是那个位置的字节?还是“神奇地”一个长度为T 的字节序列?我应该先将void* 转换为T* 吗?

【问题讨论】:

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


    【解决方案1】:

    你不能取消引用一个 void 指针,它不指向一个对象。但 C 标准规定:

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

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

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

    【讨论】:

    • 不知道使用 void 指针,但当然是完全合理的!谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多