Sto po 'confuso con l'applicabilità del reinterpret_cast
vs static_cast
. Da quello che ho letto le regole generali sono di usare il cast statico quando i tipi possono essere interpretati in fase di compilazione da qui la parola static
. Questo è il cast che il compilatore C ++ usa internamente anche per cast impliciti.
reinterpret_cast
sono applicabili in due scenari:
- converte i tipi interi in tipi di puntatori e viceversa
- converti un tipo di puntatore in un altro. L'idea generale che ottengo è che questo non è giustificabile e dovrebbe essere evitato.
Dove sono un po 'confuso è un uso di cui ho bisogno, sto chiamando C ++ da C e il codice C deve rimanere sull'oggetto C ++, quindi sostanzialmente contiene a void*
. Quale cast dovrebbe essere usato per convertire tra il tipo void *
e il tipo di classe?
Ho visto l'uso di entrambi static_cast
e reinterpret_cast
? Anche se da quello che ho letto sembra che static
sia meglio come può accadere il cast in fase di compilazione? Anche se dice di usare reinterpret_cast
per convertire da un tipo di puntatore a un altro?
reinterpret_cast
non accade in fase di esecuzione. Sono entrambe dichiarazioni in fase di compilazione. Da en.cppreference.com/w/cpp/language/reinterpret_cast : "A differenza di static_cast, ma come const_cast, l'espressione reinterpret_cast non viene compilata in nessuna istruzione della CPU. È puramente una direttiva del compilatore che indica al compilatore di trattare la sequenza di bit (rappresentazione dell'oggetto) dell'espressione come se avesse il tipo new_type. "