static_cast 无效
static_cast does not work
我正在尝试使用 static_cast
将 uint8_t*
转换为 Some_Type_T*
其中 Some_Type_T
是 struct
.
SomeType_T* pTarget = static_cast<SomeType_T*>(pData)
这给了我一个错误
invalid static_cast from type 'uint8_t [1000] {aka unsigned char [1000]}' to type 'Some_Type_T*'
基本上我想要实现的是将缓冲区(字节数组)映射到某个结构。
我已经用类似 C 的演员表做过很多次了。但我认为 static_cast<>
更安全。
你能告诉我为什么这不起作用吗?
演员姓名为:
SomeType_T* pTarget = reinterpret_cast<SomeType_T*>(pData);
因为您打算将字节数组重新解释为另一种对象类型。
实际上继续读取内存,就好像它是结构类型违反了 strict aliasing rule,导致未定义的行为。另一个问题是,如果 pData
没有正确对齐结构,那么您将得到不希望的结果。
如果您的结构类型是 trivially copyable 那么您可以定义一个结构并将数据 memcpy 到其中。
我正在尝试使用 static_cast
将 uint8_t*
转换为 Some_Type_T*
其中 Some_Type_T
是 struct
.
SomeType_T* pTarget = static_cast<SomeType_T*>(pData)
这给了我一个错误
invalid static_cast from type 'uint8_t [1000] {aka unsigned char [1000]}' to type 'Some_Type_T*'
基本上我想要实现的是将缓冲区(字节数组)映射到某个结构。
我已经用类似 C 的演员表做过很多次了。但我认为 static_cast<>
更安全。
你能告诉我为什么这不起作用吗?
演员姓名为:
SomeType_T* pTarget = reinterpret_cast<SomeType_T*>(pData);
因为您打算将字节数组重新解释为另一种对象类型。
实际上继续读取内存,就好像它是结构类型违反了 strict aliasing rule,导致未定义的行为。另一个问题是,如果 pData
没有正确对齐结构,那么您将得到不希望的结果。
如果您的结构类型是 trivially copyable 那么您可以定义一个结构并将数据 memcpy 到其中。