使用C ++风格cast:static从Void *转换为TYPE *
所以如果你使用从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)
您应该使用static_cast,以便正确操作指针以指向正确的位置。 但是,只有在使用静态转换才能将指针强制转换为void *时才应该这样做。 否则,你应该reinterpret_cast到完全相同类型的原始指针(没有基地或这样的)。
为此,请在两侧使用static_cast
,并在没有其他投射操作完成时保存reinterpret_cast
。 以下SO主题提供了更多的上下文和详细信息:
C ++标准中的措辞允许static_cast <non-void-type *>(malloc(N)); 上班?
何时使用reinterpret_cast?
你应该总是避免reinterpret_cast
,在这种情况下, static_cast
将完成这项工作。 转换为void*
指针时不需要任何类型的转换。