我在尝试重新解释-投射指针时遇到一个奇怪的语法错误:
void my_function(std::unique_ptr<float[]> ptr) {
// Some stuff
... = reinterpret_cast<uint8_t[]*>(ptr.release());
// Some other stuff
}
我收到以下错误消息:
error: expected '>'
reinterpret_cast<uint8_t[] *>(ptr.release()));
^
我有一个"<"和一个匹配的">",所以我不明白是什么导致了错误。这里可能有什么问题?
假设您正在尝试序列化数据,则应强制转换为常规uint8_t
指针。为此,只需执行以下操作:
reinterpret_cast<uint8_t*>(ptr.release());
请注意,ptr.release()
释放unique_ptr
拥有的指针,并且删除指向float
数组的指针作为指向uint8_t
数组的指针是未定义的行为。始终删除指针的原始类型,而不强制转换它。
我建议改用ptr.get()
,因为这不会转移所有权:
reinterpret_cast<uint8_t*>(ptr.get());
出现错误的原因:指向数组的指针的语法为 uint8_t(*)[]
。它。。。很奇怪,直到另一位评论者指出它,我才知道它的存在(它是与 C 向后兼容的工件(。
正因为如此,编译器不希望在uint8_t[]
之后看到*
,所以它说它期望reinterpret_cast
的右括号。
你真的想要一个指向uint8_t数组的指针,而不仅仅是一个指向uint8_t的指针吗?
如果是这样,则写uint8_t(*)[]
.
但我认为你真正想要的很可能是指向uint8_t的指针,即 uint8_t *
.