Sto po 'confuso con l'applicabilità del reinterpret_castvs 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_castsono 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_caste reinterpret_cast? Anche se da quello che ho letto sembra che staticsia meglio come può accadere il cast in fase di compilazione? Anche se dice di usare reinterpret_castper convertire da un tipo di puntatore a un altro?
reinterpret_castnon 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. "