2012-04-09 20 views

risposta

17

Con un static_cast. Nota che devi farlo solo se il puntatore punta davvero su un oggetto del tipo specificato; ovvero, il valore del puntatore a void è stato preso da un puntatore a tale oggetto.

thing * p = whatever(); // pointer to object 
void * pv = p;   // pointer to void 
thing * p2 = static_cast<thing *>(pv); // pointer to the same object 

Se vi trovate a doverlo fare, potreste voler ripensare il vostro progetto. Stai rinunciando al tipo di sicurezza, rendendo facile scrivere codice non valido:

something_else * q = static_cast<something_else *>(pv); 
q->do_something(); // BOOM! undefined behaviour. 
+3

No, non è utile; è sbagliato. Usa 'reinterpret_cast'. –

+0

@MarceloCantos: Perché dovresti usare un cast ancora più pericoloso di quello che ti serve? –

+2

+1 @MarceloCantos: No, è corretto in effetti. 'static_cast' è usato per invertire le conversioni implicite e il puntatore di classe nel puntatore void è una conversione implicita. –

Problemi correlati