los javiera imposibles compromiso canciones cancion c++ iostream language-lawyer unsigned signed

c++ - javiera - compromiso cancion



¿Por qué se define std:: streamsize como firmado en lugar de sin firmar? (1)

Según http://en.cppreference.com/w/cpp/io/streamsize

El tipo std :: streamsize es un tipo integral con signo que se utiliza para representar el número de caracteres transferidos en una operación de E / S o el tamaño de un búfer de E / S.

Por lo que puedo imaginar, el tamaño de un flujo nunca puede ser negativo, por lo que mi pregunta es:

¿Por qué se define std::streamsize como firmado en lugar de sin firmar ? ¿Cuál es la razón detrás?


El borrador del estándar de C ++ tiene la siguiente nota 296 en la sección 27.5.2 Tipos que dice:

streamsize se usa en la mayoría de los lugares donde ISO C usaría size_t. La mayoría de los usos de streamsize podrían usar size_t, excepto para los constructores strstreambuf, que requieren valores negativos. Probablemente debería ser el tipo firmado correspondiente a size_t (que es lo que Posix.2 llama ssize_t).

y podemos ver en la sección D.7.1.1 constructores de strstreambuf que tenemos las siguientes entradas (el énfasis es mío ):

strstreambuf(char* gnext_arg, streamsize n, char *pbeg_arg = 0); strstreambuf(signed char* gnext_arg, streamsize n, signed char *pbeg_arg = 0); strstreambuf(unsigned char* gnext_arg, streamsize n, unsigned char *pbeg_arg = 0);

y dice:

gnext_arg apuntará al primer elemento de un objeto de matriz cuyo número de elementos N se determina de la siguiente manera:

y podemos ver en la siguiente discusión que n que es de tipo streamsize es realmente necesario para poder tomar un valor negativo:

- Si n> 0, N es n.

- Si n == 0, N es std :: strlen (gnext_arg).

- Si n <0, N es INT_MAX . 336

Este parece ser un mal argumento para este requisito y el problema cerrado 255 tiene un comentario similar de Howard Hinnant que dice:

Esto es algo así como una tontería, pero me pregunto si la reducción de flujo no sería una mejor opción que la de transmisión. El argumento de pbump y gbump DEBE estar firmado. [...] Esto parece un poco débil para el argumento de pbump y gbump. Si alguna vez nos deshacemos de Strstream, esta nota a pie de página podría ir con eso, junto con la razón para hacer que Streamsize se firme.