2012-01-05 9 views
14

Duplicar posible:
Difference between string.h and cstring?Incluyendo archivos de encabezado estándar. string.h o cstring? ¿o ambos?

Qué es mejor práctica de programación en C++ si se incluyen los archivos de encabezado estándar con respecto a

incluyendo cmath en lugar de math.h o viceversa ?

incluyendo cstring en lugar de string.h o viceversa?

y para otros archivos de encabezado <c*> y <*.h> que aparentemente parecen lograr lo mismo?

+0

@Jefromi: no es exactamente un idiota; esta pregunta también se refiere a ''. –

Respuesta

23

<cstring> es más nuevo; <string.h> está realmente ahí para la compatibilidad con versiones anteriores (y para C, por supuesto). La diferencia es que <cstring> pone las funciones de cadena en el espacio de nombres std, mientras que <string.h> las pone en el espacio de nombres global.

Además, <cstring> cambia los tipos de ciertas funciones para promover la seguridad de tipo. Por ejemplo, la declaración C

char *strchr(char const *, int); 

se sustituye por las sobrecargas (en el std espacio de nombres)

char  *strchr(char  *, int); 
char const *strchr(char const *, int); 

En el caso de <cmath> hay further differences con <math.h> que hacen <cmath> más idiomática y menos C-como .

Prefiera <cstring> para el nuevo código y use el prefijo std:: en las funciones.

Cuestiones relacionadas