c++ - procesos - valores morales
¿Se requieren los dígitos de carácter[''0''.. ''9''] para tener valores numéricos contiguos? (1)
Debe una implementación de C ++ establecer los caracteres ''0'' - ''9'' para tener valores numéricos contiguos, es decir, para que:
''0'' -> 0+n
''1'' -> 1+n
m -> m+n
''9'' -> 9+n
No puedo encontrarlo mencionado en la documentación de isdigit
([clasificación] (22.3.3.1 Clasificación de caracteres)) * , ni tampoco puedo encontrarlo en la documentación de la configuración regional (pero tal vez no busqué lo suficiente).
En 2.3 conjuntos de caracteres, encontramos que
El conjunto de caracteres de origen básico consta de 96 caracteres: el carácter de espacio, los caracteres de control que representan la pestaña horizontal, la pestaña vertical, el avance de página y la nueva línea, más los siguientes 91 caracteres gráficos
Pero no menciona ningún pedido (pero quizás no busqué lo suficiente).
* : Interesante nota al pie:
Cuando se usa en un bucle, es más rápido almacenar en caché la faceta ctype <> y usarla directamente [en lugar de isdigit () et al, comentario final], o usar la forma vectorial de ctype <> :: is.
De hecho no parecía lo suficientemente duro: en 2.3. Conjuntos de caracteres, artículo 3:
Tanto en la fuente como en los juegos de caracteres básicos, el valor de cada carácter después de 0 en la lista anterior de dígitos decimales será uno mayor que el valor del anterior .
Y esto está por encima de la lista de dígitos decimales:
0 1 2 3 4 5 6 7 8 9
Por lo tanto, una implementación debe usar un conjunto de caracteres donde los dígitos decimales tengan una representación contigua. Por lo tanto, las optimizaciones en las que usted confía en esta propiedad son seguras; sin embargo, las optimizaciones en las que confía en la coniguidad de otros dígitos (por ejemplo, ''a'' .. ''z'') no son portátiles al estándar (vea también el encabezado <cctype>
). Si haces esto, asegúrate de hacer valer esa propiedad.