tiro tipos tecnica suspensión lanzamientos lanzamiento estatico entrada dinamico canasta bote basquetbol baloncesto c++

c++ - tipos - lanzamiento estático versus lanzamiento dinámico



tiro de entrada en baloncesto (7)

El compilador realiza la conversión estática: trata el resultado como el tipo de destino, sin importar qué. Haga esto cuando esté absolutamente seguro de que el argumento es del tipo de destino.

La conversión dinámica se realiza en tiempo de ejecución y, por lo tanto, requiere información de tipo de tiempo de ejecución. Haga esto cuando no esté seguro del tipo que tiene: la conversión puede fallar, lo que se muestra cuando el valor de retorno es nulo. También se puede hacer solo para punteros y referencias.

Posible duplicado:
Reparto regular vs. static_cast vs. dynamic_cast

No acabo de saber cuándo usar el reparto estático y cuándo dinámico. ¿Alguna explicación por favor?


El lanzamiento dinámico requiere RTTI y hace algo de magia en comparación con el lanzamiento estático. static_cast es solo un tiempo de compilación, verifica si la clase de origen puede ser promovida a la clase lanzada por algunas reglas simples como herencia.

Por ejemplo, en casos de herencia virtual, solo dynamic_cast puede resolver la situación.

Además, dynamic_cast devolverá NULL si la conversión no es posible, por lo que puede tomar una decisión diferente.

Por otro lado, dynamic_cast es más lento, ya que implica que se está ejecutando algún código y, como se dijo anteriormente, necesita RTTI habilitado, lo que aumenta el tamaño de los binarios.


En algunos contextos, como este, "estático" se refiere a tiempo de compilación y "dinámico" se refiere a tiempo de ejecución.

Para la verificación en tiempo de compilación, use static_cast (limitado a lo que sabe el compilador). Para la verificación en tiempo de ejecución, use dynamic_cast (limitado a las clases con RTTI). Para ninguna comprobación, utilice reinterpret_cast.


Si estás hablando de C ++. Entonces static_cast no es un tipo de casting seguro. Se puede convertir a su tipo, pero si está mal, no arrojará ningún error / mensaje. Así obtendrás mal objeto de eso. Y el dynamic_cast está lanzando un error si el lanzamiento fallado :) ¡Espero que esto ayude! :)



static_cast es similar al antiguo estilo C y se puede aplicar a casi cualquier cosa. static_cast se usaría cuando esté seguro de los tipos en cuestión. Por ejemplo, por lo general uso un static_cast cuando se realiza la conversión entre int y enum .

dynamic_cast solo se puede utilizar con punteros y referencias. Si no se lanza, se devuelve un puntero nulo. dynamic_cast se usa generalmente cuando se resuelven los punteros a las clases usadas en la herencia donde se quiere asegurar que el puntero que está lanzando sea del tipo esperado.

También puedes ver C ++: Documentación: Tutorial de lenguaje C ++: Type Casting


Utilice dynamic_cast cuando dynamic_cast conversión de un tipo de clase base a un tipo de clase derivado. Comprueba que el objeto que se está emitiendo es en realidad del tipo de clase derivado y devuelve un puntero nulo si el objeto no es del tipo deseado (a menos que esté bad_cast conversión a un tipo de referencia, luego arroja una excepción bad_cast ).

Utilice static_cast si esta comprobación adicional no es necesaria. Como dijo Arkaitz, ya que dynamic_cast realiza la verificación adicional, requiere información RTTI y, por lo tanto, tiene una mayor sobrecarga de tiempo de ejecución, mientras que static_cast se realiza en tiempo de compilación.