¿Cuál es la diferencia entre static_cast<> y la conversión estilo C? [duplicar]

Resuelto dicroce asked hace 15 años • 7 respuestas

¿ Hay alguna razón para preferir static_cast<>el casting estilo C? ¿Son equivalentes? ¿Hay algún tipo de diferencia de velocidad?

dicroce avatar Oct 23 '09 01:10 dicroce
Aceptado

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.

Glen avatar Oct 22 '2009 18:10 Glen

En breve :

  1. static_cast<>()le brinda la capacidad de verificar el tiempo de compilación, el elenco C-Style no.
  2. 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.
  3. 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í

Hossein avatar Aug 24 '2013 01:08 Hossein