¿Cuál es la diferencia entre static_cast, dynamic_cast, reinterpret_cast y el casting de estilo C en C++?
¡Hola a todos! Acabo de empezar a aprender C++ y no puedo entender los casts de tipos. En libros y foros escriben sobre `static_cast`, `dynamic_cast`, `reinterpret_cast` y también sobre el antiguo casting de estilo C con paréntesis. Cuando programo en C, simplemente escribía `(int)myDouble` y funcionaba. Pero en C++ me dicen que hacerlo así está mal y que debo usar el estilo C++.
Por ejemplo, tengo una jerarquía de clases:
```cpp
class Base { public: virtual ~Base() {} };
class Derived : public Base { public: void foo() {} };
```
Quiero convertir `Base*` a `Derived*`. Parece que puedo escribir `(Derived*)basePtr` y se compilará. Pero, ¿qué es mejor usar? He oído que `dynamic_cast` puede devolver `nullptr` si el casting falla, mientras que `static_cast` no lo hace. También está `reinterpret_cast`, que lo rompe todo.
Ayúdenme a entender: ¿qué cast usar en cada caso? ¿Hay situaciones donde el casting de estilo C sigue siendo aceptable? ¿Y por qué en C++ se hicieron tantos casts diferentes?
No answers yet.
Inicia sesión para dejar una respuesta