Comparación de operadores para conversión forzada de tipos en C++

Hola comunidad,

El siguiente post es acerca de una característica disponible en  C++, la cual tiende a confundir a muchos desarrolladores. Me refiero a los operadores para realizar conversiones forzadas de tipo (casting). Estos operadores complementan al operador ofrecido y tomado de C (el cuál se mantiene por compatibilidad) sin embargo el C++ standard  define los siguientes operadores:

  • static_cast: Éste es el más útil de los operadores. Puede utilizarse para realizar cualquier conversión forzada de tipo implícita. Cuando una conversión implícita pierde información, algunos compiladores generan advertencias, y static_cast elimina estas advertencias. La conversión implícita a través de dicho operador también es útil para resolver la ambigüedad o hacer evidente la presencia de una conversión forzada de tipo. Se puede utilizar también para invocar un constructor unario que se haya declarado como explicit. Así mismo puede ser utilizado para convertir forzosamente el tipo hacia arriba o abajo de la jerarquí de clases, cómo dynamic_cast, excepto que no hay chequeo en el tiempo de ejecución.
  • dynamic_cast: Es utilizado con punteros polimórficos o refeencias que pueden moverse hacia arriba o abajo en la jerarquía de clases. Éste operador realiza chequeos en tiempo de ejecución: Sí el tipo del objeto no es el esperado, entonces retornará NULL durante una conversión forzada de tipo de punteros y arrojará una excepción de tipo std::bad_cast cuando se aplique a una referencia.
  • const_cast: Es utilizado para eliminar los calificadores const y/o volatile de una variable.
  • reinterpret_cast: Es utilizado para realizar conversiones forzadas de tipo entre tipo de datos que no están relacionados, por ejemplo, conversión de tipo entre punteros no relacionados (como char* a void*) o conversiones entre un entero y un puntero.

Saludos,

Angel

 

Leave a Reply

Your email address will not be published. Required fields are marked *