Estoy algo confundido con la aplicabilidad de reinterpret_cast
frente static_cast
. Por lo que he leído, las reglas generales son usar reparto estático cuando los tipos se pueden interpretar en tiempo de compilación, de ahí la palabra static
. Este es el reparto que el compilador de C ++ usa internamente también para los lanzamientos implícitos.
reinterpret_cast
s son aplicables en dos escenarios:
- convertir tipos enteros a tipos de puntero y viceversa
- convertir un tipo de puntero a otro. La idea general que tengo es que esto no es portátil y debe evitarse.
Cuando estoy un poco confundido es un uso que necesito, estoy llamando a C ++ desde C y el código C debe retener el objeto C ++, por lo que básicamente contiene un void*
. ¿Qué reparto se debe usar para convertir entre el tipo void *
y el de clase?
He visto el uso de ambos static_cast
y reinterpret_cast
? Aunque, por lo que he estado leyendo, parece que static
es mejor ya que el reparto puede suceder en tiempo de compilación. ¿Aunque dice usar reinterpret_cast
para convertir de un tipo de puntero a otro?
reinterpret_cast
no sucede en tiempo de ejecución. Ambas son declaraciones en tiempo de compilación. De en.cppreference.com/w/cpp/language/reinterpret_cast : "A diferencia de static_cast, pero como const_cast, la expresión reinterpret_cast no se compila con ninguna instrucción de la CPU. Es puramente una directiva del compilador que le indica al compilador que trate la secuencia de bits (representación de objeto) de expresión como si tuviera el tipo new_type ".