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

时间:2010-06-17 18:36:50

标签: c++ casting static-cast reinterpret-cast

因此,如果您从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)

3 个答案:

答案 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?

When to use reinterpret_cast?

答案 2 :(得分:0)

您应该始终避免reinterpret_cast,在这种情况下static_cast将完成这项工作。转换为void*指针时不需要任何类型的强制转换。