reinterpret_cast 放弃预选赛

reinterpret_cast casts away qualifiers

我添加了一个关于重新解释变量的问题,我不知道为什么..

int ProgressBar(const uint64_t data_sent, const uint64_t data_total, void const *const data)
{
    Dialog *dialog = reinterpret_cast<Dialog*> (data);
    dialog->setValue((data_sent *100) / data_total);
}

reinterpret_cast 似乎不允许

reinterpret_cast from 'const void *) to Dialog * casts away qualifiers

任何想法

正如 Nick Strupat 在评论中所说,

reinterpret_cast can't cast away cv-qualifiers

因此您可以同时使用 reinterpret_castconst_cast

Dialog *dialog = const_cast<Dialog*>(reinterpret_cast<const Dialog *>(data));

您还需要使用 const_cast 来删除 const 限定符。此外,从 void * 转换可以使用 static_cast,不需要重新解释。例如:

Dialog const *dialog = static_cast<Dialog const *>(data);
Dialog *d2 = const_cast<Dialog *>(dialog);

但是,请确保对话框实际上不是 const 对象;尝试修改 const 对象(大概 setValue 这样做)会导致未定义的行为。

我建议重新考虑 ProgressBar 的接口以避免需要此转换。