Avatar ·

Cuándo usar static_cast, dynamic_cast, const_cast y reinterpret_cast en C++?

¡Hola a todos! Empecé a estudiar C++ y me encontré con diferentes operadores de conversión de tipos. Sé que en C existe una conversión simple entre paréntesis, pero dicen que en C++ se deben usar operadores especiales: `static_cast`, `dynamic_cast`, `const_cast` y `reinterpret_cast`. Estoy muy confundido sobre cuándo usar cada uno. Por ejemplo, tengo este código: ```cpp class Base { public: virtual void show() { std::cout << "Base\n"; } }; class Derived : public Base { public: void show() override { std::cout << "Derived\n"; } void extra() { std::cout << "Extra\n"; } }; int main() { Base* basePtr = new Derived(); // ¿Cómo convertir correctamente Base* a Derived*? Derived* d1 = (Derived*)basePtr; // C-style cast — funciona, pero ¿es correcto? int a = 10; double b = (double)a; // También C-style, pero ¿no existe static_cast? const int x = 5; int* ptr = (int*)&x; // ¿Esto es const_cast? // Y además: ¿cómo obtener la dirección de una variable como entero?