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_cast
和 const_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
的接口以避免需要此转换。
我添加了一个关于重新解释变量的问题,我不知道为什么..
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_cast
和 const_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
的接口以避免需要此转换。