令人误解的语法/解析器错误:在reinterpret_cast中应为>而不是*

时间:2019-04-23 22:37:00

标签: c++

尝试重新解释指针时出现奇怪的语法错误:

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()));
                                ^

我有一个'<'和一个匹配的'>',所以我不明白是什么导致了错误。这可能是什么问题?

2 个答案:

答案 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 *