2010-02-04 9 views
5

En C++ para cualquier tipo de datos que pueda hacer lo siguiente:¿Qué tipo de elenco es de Tipo * a vacío *?

Type* typedPointer = obtain(); 
void* voidPointer = typedPointer; 

cuales fundido se lleva a cabo cuando se le asigno a Type*void*? ¿Es esto lo mismo que

Type* typedPointer = obtain(); 
void* voidPointer = reinterpret_cast<void*>(typedPointer); 

o es algún otro elenco?

Respuesta

4

Es una conversión de puntero estándar. Dado que es una conversión estándar, no requiere un lanzamiento explícito.

Si desea reproducir el comportamiento de esa conversión con un molde explícito, sería static_cast, no reinterpret_cast.

Sea la definición de static_cast dada en 5.2.9/2, static_cast puede realizar todas las conversiones que se pueden realizar implícitamente.

2

Es el mismo elenco. Cualquier puntero puede convertirse en un puntero de vacío.

4

De Type* a void* la conversión implícita está disponible. Puede usar static_cast para aclarar la intención del código. Para la inversa que requieren reinterpret_cast

EDITAR: Según el comentario para que el contrario también puede ser utilizado static_cast. Intenté una muestra de código y de hecho compila. No lo sabía y siempre usé reinterpret_cast para lanzar desde un vacío *.

4

No es un molde, es una conversión implícita. Los moldes son explícitos por definición. No es más un molde que:

char c = 'a'; 
int i = c; 

is.