使用C++样式转换从Void*转换为TYPE*:static_cast或reinterpret_cast

Rob*_*boy 7 c++ casting static-cast reinterpret-cast

因此,如果您从Void*转换为Type*或从Type*转换为Void*,您应该使用:

void func(void *p)
{
    Params *params = static_cast<Params*>(p);
}
Run Code Online (Sandbox Code Playgroud)

要么

void func(void *p)
{
    Params *params = reinterpret_cast<Params*>(p);
}
Run Code Online (Sandbox Code Playgroud)

对我来说static_cast似乎更正确,但我看到两者都用于同一目的.此外,转换的方向是否重要.即我还应该使用static_cast:

_beginthread(func,0,static_cast<void*>(params)
Run Code Online (Sandbox Code Playgroud)

我已经阅读了关于C++样式转换的其他问题但是我仍然不确定这个场景的正确方法是什么(我认为它是static_cast)

Edw*_*nge 7

您应该使用static_cast,以便正确操作指针以指向正确的位置.但是,如果您使用静态强制转换将指针强制转换为void*,则应该只执行此操作.否则你应该reinterpret_cast到完全相同类型的原始指针(没有基础或类似).