8

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

4

3 回答 3

8

您应该使用 static_cast 以便正确操作指针以指向正确的位置。但是,只有在首先使用静态强制转换将指针强制转换为 void* 时,才应该这样做。否则,您应该将 reinterpret_cast 重新解释为与原始指针完全相同的类型(无基数等)。

于 2010-06-17T18:43:17.823 回答
4

static_cast为此在两侧使用,并reinterpret_cast在没有其他铸造操作时使用。以下 SO 主题提供了更多上下文和详细信息:

C++ 标准中的哪些措辞允许 static_cast<non-void-type*>(malloc(N)); 去工作?

何时使用 reinterpret_cast?

于 2010-06-17T18:53:48.900 回答
0

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

于 2010-06-17T18:43:31.793 回答