Avatar ·

Por qué deberías usar static_cast<int>(x) en lugar de (int)x o int(x) en C++?

¡Hola! Recientemente comencé a estudiar C++ y noté que en libros antiguos y foros a menudo usan esta sintaxis para conversión de tipos: ```cpp double d = 3.14; int i = (int)d; // C-style cast // o int j = int(d); // functional-style cast ``` Pero luego vi que muchos desarrolladores experimentados escriben así: ```cpp int k = static_cast(d); ``` Y dicen que esta es la forma "correcta". No entiendo bien cuál es la diferencia. Después de todo, el resultado es el mismo en todos los casos: la parte fraccionaria se descarta. ¿Por qué escribir el largo `static_cast(x)` si simplemente se puede escribir `(int)x`? ¿Acaso no es solo inflar el código? Me confunden especialmente los siguientes puntos: 1. ¿Hay casos donde `(int)x` haga algo inesperado, pero `static_cast` no? 2. ¿Es cierto que el C-style cast es menos seguro? Si es así, ¿por qué el compilador lo permite? 3. ¿Afecta esto al rendimiento o es solo una cuestión de estilo? Agradecería una explicación clara con ejemplos, preferiblemente en código real.