Avatar ·

¿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?