在开发嵌入式Linux的Qt应用程序(真正欢迎性能改进)的过程中,我遇到了从一组字符转换为给定结构的必要性。直到现在,这是用代码完成的:
MyStruct* const my_struct = reinterpret_cast< MyStruct* >(qbytearray.data());
而data()
是Qt类QByteArray
的成员,它将字节数组转换为char*
。在这样做时,很难,它会对数据进行深层复制,但鉴于额外的处理效果并不好。由于我只想读取数据(结构化的结构永远不会用于编辑),因此替代方法QByteArray::constData()
更可取,因为它不会进行深层复制,但相反会返回{{ 1}}而不是const char*
。
问题是:我现在应该如何进行施法?我尝试使用const_cast但没有成功。
char*
和MyStruct* const my_struct = const_cast< MyStruct* >(qbytearray.constData()); // compile error
const MyStruct* const my_struct = const_cast< MyStruct* >(qbytearray.constData()); // compile error
也没有效果,因为&#34;它会抛弃限定符&#34;,这是预期的。我能够做到这一点的最接近的方式是首先投射到reinterpret_cast
,然后投射到结构:
char*
但我觉得这不仅仅是&#34;绕着&#34;问题,但从MyStruct* const my_struct = (MyStruct*)const_cast< char* >(qbytearray.constData());
到char*
的铸造最终将牺牲我所希望的加工改进。
那么如何正确投射?
答案 0 :(得分:3)
这与const_cast
无关。你不是要试图抛弃const
- ness。
const MyStruct* my_struct = reinterpret_cast<const MyStruct* >(qbytearray.constData());