尝试重新解释指针时出现奇怪的语法错误:
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()));
^
我有一个'<'和一个匹配的'>',所以我不明白是什么导致了错误。这可能是什么问题?
答案 0 :(得分:2)
假设您要尝试序列化数据,则应强制转换为常规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
的结尾。
答案 1 :(得分:0)
您真的想要一个指向uint8_t数组的指针,而不是指向uint8_t的指针吗?
如果是这样,它将写为uint8_t(*)[]
。
但是我认为您真正想要的是最可能指向uint8_t的指针,即uint8_t *
。