Robben_Ford_Fan_boy
Robben_Ford_Fan_boy

Reputation: 8728

Cast from Void* to TYPE* using C++ style cast: static_cast or reinterpret_cast

So if your converting from Void* to Type* or from Type* to Void* should you use:

void func(void *p)
{
    Params *params = static_cast<Params*>(p);
}

or

void func(void *p)
{
    Params *params = reinterpret_cast<Params*>(p);
}

To me static_cast seems the more correct but I've seen both used for the same purpose. Also, does the direction of the conversion matter. i.e. should I still use static_cast for:

_beginthread(func,0,static_cast<void*>(params)

I have read the other questions on C++ style casting but I'm still not sure what the correct way is for this scenario (I think it is static_cast)

Upvotes: 8

Views: 8254

Answers (3)

anon
anon

Reputation:

You should always avoid reinterpret_cast, and in this case static_cast will do the job. There is no need for a cast of any sort when converting to a void* pointer.

Upvotes: 0

Owen S.
Owen S.

Reputation: 7855

Use static_cast on both sides for this, and save reinterpret_cast for when no other casting operation will do. The following SO topics provide more context and details:

What wording in the C++ standard allows static_cast<non-void-type*>(malloc(N)); to work?

When to use reinterpret_cast?

Upvotes: 4

Edward Strange
Edward Strange

Reputation: 40897

You should use static_cast so that the pointer is correctly manipulated to point at the correct location. However, you should only do this if you used static cast to cast the pointer to void* in the first place. Otherwise you should reinterpret_cast to exactly the same type of the original pointer (no bases or such).

Upvotes: 9

Related Questions