Подтвердить что ты не робот

Являются ли цифры символов ['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.

4b9b3361

Ответ 1

На самом деле не выглядел достаточно сложно: в 2.3. Наборы символов, пункт 3:

В обоих базовых наборах исходного и исполняемого значений значение каждого символа после 0 в выше список десятичных цифр должен быть выше, чем значение предыдущего.

И это над списком десятичных цифр:

0 1 2 3 4 5 6 7 8 9

Следовательно, реализация должна использовать набор символов, где десятичные цифры имеют непрерывное представление. Таким образом, оптимизация, в которой вы полагаетесь на это свойство, безопасна; однако оптимизация, когда вы полагаетесь на согласованность других цифр (например, "a".. "z" ), не переносится w.r.t. к стандарту (см. также заголовок <cctype>). Если вы это сделаете, обязательно подтвердите это свойство.