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。的矢量形式。
答案 0 :(得分:22)
确实不够用力:在2.3中。字符集,第3项:
在源和执行基本字符集中,在0之后的每个字符的值 十进制数字列表上方
这是在十进制数字列表上方:
0 1 2 3 4 5 6 7 8 9
因此,实现必须使用小数位具有连续表示的字符集。因此,您依赖此属性的优化是安全的;但是,依赖于其他数字(例如'a'..'z')的含义的优化是而不是便携式w.r.t.标准(另见标题<cctype>
)。如果这样做,请确保断言该属性。