Являются ли цифры символов ['0'.. '9'] обязательными для непрерывных числовых значений?
Должна ли реализация С++ задавать символы 0 '-' 9 'для непрерывных числовых значений, т.е. так:
'0' -> 0+n
'1' -> 1+n
m -> m+n
'9' -> 9+n
Я не могу найти это в документации isdigit
([классификация] (22.3.3.1 Классификация символов)) *,
и я не могу найти его в документации по локали (но, возможно, я не выглядел достаточно сложно).
В 2.3 наборах символов мы находим, что
Основной набор символов источника состоит из 96 символов: символ пробела, символы управления, представляющие горизонтальная вкладка, вертикальная вкладка, подача формы и новая строка плюс следующие 91 графический символ
Но он не упоминает о каком-либо заказе (но, возможно, я не выглядел достаточно сложно).
*: Интересная сноска:
При использовании в цикле быстрее кэшировать ctype < > facet и использовать его непосредственно [вместо isdigit() et al, end comment] или использовать векторную форму ctype < > :: is.
Ответы
Ответ 1
На самом деле не выглядел достаточно сложно: в 2.3. Наборы символов, пункт 3:
В обоих базовых наборах исходного и исполняемого значений значение каждого символа после 0 в выше список десятичных цифр должен быть выше, чем значение предыдущего.
И это над списком десятичных цифр:
0 1 2 3 4 5 6 7 8 9
Следовательно, реализация должна использовать набор символов, где десятичные цифры имеют непрерывное представление. Таким образом, оптимизация, в которой вы полагаетесь на это свойство, безопасна; однако оптимизация, когда вы полагаетесь на согласованность других цифр (например, "a".. "z" ), не переносится w.r.t. к стандарту (см. также заголовок <cctype>
). Если вы это сделаете, обязательно подтвердите это свойство.