问题
In C++ for any data type I can do the following:
Type* typedPointer = obtain();
void* voidPointer = typedPointer;
which cast is performed when I assign Type*
to void*
? Is this the same as
Type* typedPointer = obtain();
void* voidPointer = reinterpret_cast<void*>( typedPointer );
or is it some other cast?
回答1:
It is a standard pointer conversion. Since it is a standard conversion, it doesn't require any explicit cast.
If you want to reproduce the behavior of that conversion with an explicit cast, it would be static_cast
, not reinterpret_cast
.
Be definition of static_cast
given in 5.2.9/2, static_cast
can perform all conversions that can be performed implicitly.
回答2:
It is not a cast, it is implicit conversion. Casts are explicit by definition. It is no more a cast than:
char c = 'a';
int i = c;
is.
回答3:
From Type*
to void*
implicit conversion is available. You can use static_cast
to clarify the intention of the code. For the reverse you require reinterpret_cast
EDIT: As per comment for the reverse also static_cast
can be used. Tried a sample piece of code and it indeed compiles. Didn't knew that and always used reinterpret_cast to cast from a void*.
回答4:
It is the same cast. Any pointer can be cast to a void-pointer.
来源:https://stackoverflow.com/questions/2198255/which-kind-of-cast-is-from-type-to-void