Sono poco confuso con l'applicabilità di reinterpret_cast
rispetto a static_cast
. Da quello che ho letto le regole generali sono quelle di usare il cast statico quando i tipi possono essere interpretati in fase di compilazione da cui la parola static
. Questo è il cast che il compilatore C++ usa internamente anche per i cast impliciti.Quando usare reinterpret_cast?
reinterpret_cast
s sono applicabili in due scenari, convertire tipi di interi in tipi di puntatori e viceversa o convertire un tipo di puntatore in un altro. L'idea generale che ottengo è che questo non è commovibile e dovrebbe essere evitato.
Dove sono un po 'confuso è un utilizzo di cui ho bisogno, chiamo C++ da C e il codice C deve rimanere sull'oggetto C++ quindi in pratica contiene uno void*
. Quale cast dovrebbe essere usato per convertire tra il void *
e il tipo di Classe?
Ho visto l'utilizzo di entrambi static_cast
e reinterpret_cast
? Anche se da quello che sto leggendo sembra static
è meglio come il cast può accadere in fase di compilazione? Anche se dice di usare reinterpret_cast
per convertire da un tipo di puntatore a un altro?
'reinterpret_cast' non si verifica in fase di esecuzione. Sono entrambe istruzioni in fase di compilazione. Da http://en.cppreference.com/w/cpp/language/reinterpret_cast: "A differenza di static_cast, ma come const_cast, l'espressione reinterpret_cast non si compila con le istruzioni della CPU, è puramente una direttiva del compilatore che istruisce il compilatore per trattare la sequenza di bit (rappresentazione dell'oggetto) di espressione come se avesse il tipo new_type. " –
@HeretoLearn, è possibile aggiungere i pezzi di codice rilevanti dal file * .c e * .cpp? Penso che possa migliorare l'esposizione della domanda. – OrenIshShalom