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.