20

C++ 实现必须将字符 '0'-'9' 设置为具有连续的数值,即:

'0' -> 0+n
'1' -> 1+n
 m  -> m+n
'9' -> 9+n

我在isdigit([classification] (22.3.3.1 Character classification)) *的文档中找不到它,在语言环境文档中也找不到它(但也许我看起来不够努力)。

在 2.3 字符集中,我们发现

基本源字符集由 96 个字符组成:空格字符、表示水平制表符、垂直制表符、换页符和换行符的控制字符,以及以下 91 个图形字符

但它没有提到任何排序(但也许我看起来不够努力)。


* : 有趣的脚注:

在循环中使用时,缓存 ctype<> facet 并直接使用它会更快[而不是 isdigit() 等,结束注释],或者使用 ctype<>::is 的向量形式。

4

1 回答 1

23

确实看起来不够努力:在 2.3 中。字符集,第 3 项:

在源和执行基本字符集中,上述十进制数字列表中0 之后的每个字符的值都应一个字符的值大一。

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

0 1 2 3 4 5 6 7 8 9

因此,实现必须使用十进制数字具有连续表示的字符集。因此,您依赖此属性的优化是安全的;但是,您依赖其他数字的连续性(例如'a'..'z')的优化不能移植到标准(另请参见标题<cctype>)。如果您这样做,请确保声明该属性。

于 2012-02-23T16:22:00.007 回答