A static_cast
es un elenco de un tipo a otro que (intuitivamente) es un elenco que podría en algunas circunstancias tener éxito y ser significativo en ausencia de un elenco peligroso. Por ejemplo, puede static_cast
un void*
a un int*
, ya que el void*
podría en realidad apuntan a una int*
, o un int
a un char
, ya que tal conversión es significativa. Sin embargo, no puede static_cast
un int*
a un double*
, ya que esta conversión solo tiene sentido si el int*
ha sido mutilado de alguna manera para apuntar a un double*
.
A reinterpret_cast
es un molde que representa una conversión insegura que podría reinterpretar los bits de un valor como los bits de otro valor. Por ejemplo, enviar un int*
a un double*
es legal con un reinterpret_cast
, aunque el resultado no está especificado. Del mismo modo, enviar un int
a un void*
es perfectamente legal con reinterpret_cast
, aunque no es seguro.
Ni static_cast
ni reinterpret_cast
pueden eliminar const
de algo. No puede convertir const int*
en int*
usando ninguno de estos moldes. Para esto, usaría un const_cast
.
Un molde de estilo C del formulario (T)
se define como intentar hacer un static_cast
si es posible, recurriendo a un reinterpret_cast
si eso no funciona. También aplicará un const_cast
si es absolutamente necesario.
En general, siempre debe preferir static_cast
para los moldes que deberían ser seguros. Si accidentalmente intentas hacer un reparto que no está bien definido, entonces el compilador informará un error. Solo use reinterpret_cast
si lo que está haciendo realmente está cambiando la interpretación de algunos bits en la máquina, y solo use un molde de estilo C si está dispuesto a arriesgarse haciendo un reinterpret_cast
. Para su caso, debe usar el static_cast
, ya que el downcast del void*
está bien definido en algunas circunstancias.
ese hilo dice sobre cuándo usarlo. Estoy preguntando qué es lo que diferencia a esa estructura cuando uso estas tres cosas, y me olvidé de la transmisión dinámica también. Sencillamente, quiero saber cómo se ve afectada la estructura. – HariHaraSudhan
La estructura no se ve afectada (a menos que se realice un fundido entre tipos numéricos). –