因此,如果您从Void *转换为Type *或从Type *转换为Void *,您应该使用:
void func(void *p)
{
Params *params = static_cast<Params*>(p);
}
或
void func(void *p)
{
Params *params = reinterpret_cast<Params*>(p);
}
对我来说static_cast似乎更正确,但我看到两者都用于同一目的。此外,转换的方向是否重要。即我仍然应该使用static_cast:
_beginthread(func,0,static_cast<void*>(params)
我已经阅读了有关C ++样式转换的其他问题,但我仍然不确定这种情况的正确方法是什么(我认为它是static_cast)
答案 0 :(得分:7)
您应该使用static_cast,以便正确操作指针以指向正确的位置。但是,如果您使用静态强制转换将指针强制转换为void *,则应该只执行此操作。否则你应该reinterpret_cast到完全相同类型的原始指针(没有碱基等)。
答案 1 :(得分:3)
为此双方使用static_cast
,并在没有其他投射操作时保存reinterpret_cast
。以下SO主题提供了更多上下文和详细信息:
What wording in the C++ standard allows static_cast<non-void-type*>(malloc(N)); to work?
答案 2 :(得分:0)
您应该始终避免reinterpret_cast
,在这种情况下static_cast
将完成这项工作。转换为void*
指针时不需要任何类型的强制转换。