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?