C++11 2.3/2说:
由通用字符名称\ NNNNNNNN指定的字符是该字符在ISO/IEC 10646中的短名为NNNNNNNN的字符。
所以我下载了ISO/IEC 10646,但是找不到“字符短名”的定义。有人能澄清一下这是指什么吗?
我最初的目标是找出为什么在使用\U指定代码点时需要8位十六进制数字,因为六位数字总是足够的。因此,我还想知道为什么C++11指定我们使用\UNNNNNN而不是\UNNNNNN。
发布于 2012-09-24 22:45:01
在Unicode字符代码图中,每个字符都有全名和短名。例如,字符/具有全名SOLIDUS和短名称002F。并非巧合的是,所有的字符短名都可以用十六进制表示。
至于为什么必须指定8位数字,我怀疑这是为了与可能使用更大/更多字符块的Unicode标准的未来版本向前兼容。
发布于 2012-09-24 22:42:45
我冒昧地猜测,我们上次被Unicode的家伙咬了一口: C++最初制造了wchar_t,这样它就可以容纳每个可能的Unicode字符。为此,它必须至少容纳16位,因为Unicode最多只能使用16位。在一个流行的实现决定实际使用16位wchar_t类型后不久,人们发现16位实际上是不够的。上一次我看Unicode时用了20位,但为什么又赌过短了呢?不太可能广泛使用24位类型,如果您需要使用特定的代码点,它最类似于只使用16位,即您可以使用\uNNNN。
2.3 lex.charset第2段中的描述似乎表明,通用字符名称是指代码点.同时,通用字符名用于指字符短名.我不是Unicode的专家,但我认为代码点是指。
https://stackoverflow.com/questions/12573805
复制相似问题