2010-02-04 16 views
5

In C++ per qualsiasi tipo di dati che possa fare il seguente: viene eseguitaQuale tipo di trasmissione è da Tipo * a void *?

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

che quando Cast assegno Type* a void*? È lo stesso di

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

o è un altro cast?

risposta

4

È una conversione puntatore standard. Poiché si tratta di una conversione standard, non richiede alcun cast esplicito.

Se si desidera riprodurre il comportamento di tale conversione con un cast esplicito, sarebbe static_cast, non reinterpret_cast.

La definizione Be di static_cast data in 5.2.9/2, static_cast può eseguire tutte le conversioni che possono essere eseguite implicitamente.

2

È lo stesso cast. Qualsiasi puntatore può essere lanciato su un puntatore vuoto.

4

Da Type* a void* la conversione implicita è disponibile. È possibile utilizzare static_cast per chiarire l'intenzione del codice. Per l'inverso si richiedono reinterpret_cast

EDIT: Come da commento per la retromarcia anche static_cast può essere utilizzato. Ho provato un pezzo di codice e lo compilo davvero. Non lo sapevo e usava sempre reinterpret_cast per lanciare da un vuoto *.

4

Non è un cast, è una conversione implicita. I cast sono espliciti per definizione. Non è più un cast di:

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

è.

Problemi correlati