使用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*指针时不需要任何类型的转换。

链接地址: http://www.djcxy.com/p/73759.html

上一篇: Cast from Void* to TYPE* using C++ style cast: static

下一篇: cast to void* not working with function pointers