字符数字['0'..'9']是否需要具有连续的数值?

时间:2012-02-23 16:20:51

标签: c++ numbers ascii numerical digits

C ++实现必须将字符'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()等,结束注释],或使用ctype<> :: is。的矢量形式。

1 个答案:

答案 0 :(得分:22)

确实不够用力:在2.3中。字符集,第3项:

  

在源和执行基本字符集中,在0之后的每个字符的值   十进制数字列表上方

这是在十进制数字列表上方:

0 1 2 3 4 5 6 7 8 9

因此,实现必须使用小数位具有连续表示的字符集。因此,您依赖此属性的优化是安全的;但是,依赖于其他数字(例如'a'..'z')的含义的优化是而不是便携式w.r.t.标准(另见标题<cctype>)。如果这样做,请确保断言该属性。