¿Cuál es la diferencia entre static_cast<> y la conversión estilo C? [duplicar]
¿ Hay alguna razón para preferir static_cast<>
el casting estilo C? ¿Son equivalentes? ¿Hay algún tipo de diferencia de velocidad?
El compilador comprueba las conversiones de estilo C++. Las conversiones de estilo C no lo son y pueden fallar en tiempo de ejecución.
Además, las conversiones de estilo C++ se pueden buscar fácilmente, mientras que es muy difícil buscar conversiones de estilo C.
Otro gran beneficio es que los 4 estilos diferentes de C++ expresan más claramente la intención del programador.
Al escribir C++, casi siempre uso los de C++ en lugar del estilo C.
En breve :
static_cast<>()
le brinda la capacidad de verificar el tiempo de compilación, el elenco C-Style no.static_cast<>()
es más legible y se puede detectar fácilmente en cualquier lugar dentro de un código fuente de C++, la conversión C_Style no lo es.- Las intenciones se transmiten mucho mejor utilizando conversiones de C++.
Más explicación :
La conversión estática realiza conversiones entre tipos compatibles . Es similar al elenco estilo C, pero es más restrictivo. Por ejemplo, la conversión de estilo C permitiría que un puntero entero apunte a un carácter.
char c = 10; // 1 byte
int *p = (int*)&c; // 4 bytes
Dado que esto da como resultado un puntero a un tipo de 4 bytes, que apunta a 1 byte de memoria asignada, escribir en este puntero provocará un error de tiempo de ejecución o sobrescribirá parte de la memoria adyacente.
*p = 5; // run-time error: stack corruption
A diferencia de la conversión de estilo C, la conversión estática permitirá al compilador verificar que los tipos de datos de puntero y punta sean compatibles, lo que permite al programador detectar esta asignación incorrecta de puntero durante la compilación.
int *q = static_cast<int*>(&c); // compile-time error
También puede consultar esta página para obtener más explicaciones sobre las conversiones de C++: haga clic aquí