c++ unsigned signed size-t

c++ - debería usar size_t o ssize_t



unsigned signed (2)

Esta pregunta ya tiene una respuesta aquí:

En mi código, no uso int o unsigned int. Solo uso size_t o ssize_t para portátil. Por ejemplo:

typedef size_t intc; // (instead of unsigned int) typedef ssize_t uintc; // (instead of int)

Porque strlen , string , vector ... todos usan size_t , así que suelo usar size_t . Y solo uso ssize_t cuando puede ser negativo.

Pero encuentro eso:

Los tipos enteros sin signo son ideales para usos que tratan el almacenamiento como una matriz de bits. Usar unsigned en lugar de int para ganar un bit más para representar enteros positivos casi nunca es una buena idea. Los intentos de garantizar que algunos valores sean positivos declarando variables sin firmar serán derrotados por las reglas de conversión implícitas.

en el libro The C ++ Programming Language .

Así que estoy desconcertado. ¿Me equivoco? ¿Por qué el STL no cumple con la sugerencia del libro?


ssize_t no está incluido en el estándar y no es portátil. size_t debe usar cuando se maneja el tamaño de los objetos (también existe ptrdiff_t para las diferencias entre los punteros).


ssize_t se usa para funciones cuyo valor de retorno podría ser un tamaño válido o un valor negativo para indicar un error. Se garantiza que pueda almacenar valores al menos en el rango [-1, SSIZE_MAX] ( SSIZE_MAX depende del sistema).

Por lo tanto, debe usar size_t siempre que quiera devolver un tamaño en bytes, y ssize_t cada vez que devuelva un tamaño en bytes o un valor de error (negativo).

Ver: http://pubs.opengroup.org/onlinepubs/007908775/xsh/systypes.h.html