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 に答える