2

C++11 标准中的第 2.14.5p9 段说(强调我的):

以 u 开头的字符串文字,例如 u"asdf",是 char16_t 字符串文字。char16_t 字符串文字的类型为“array of n const char16_t”,其中 n 是字符串的大小,定义如下;它具有静态存储持续时间并使用给定字符进行初始化。 单个 c-char 可能会以代理对的形式产生多个 char16_t 字符

如何编码 unicode 点 U+10000,它由 char16_t 字符串文字中的代理对 D800(高代理)和 DC00(低代理)组成?

c-char引用文本中的上述内容是什么意思?

4

1 回答 1

4

其实很简单:u"\U00010000". 如文中所述,单个c-char(在本例中为\U00010000)可以产生多个char16_t. 快速测试将显示 的类型u"\U00010000"char16_t const[3](代理对为 2 + 空终止符为 1)。

或者,您可以简单地将字符直接放在字符串中,如u"",假设源文件使用编译器期望的编码保存。这将是完全相同的事情,因为对源文件执行的第一步是将基本字符集之外的任何字符替换为其通用字符名(即\U00010000)。

c-char是“源字符集的任何成员,除了单引号'、反斜杠\或换行符”,或转义序列(如\n,或\123,或\x41),或通用字符名(如\u1234\U12345678)。

标准文档的末尾有一个语法生成索引,您可以使用它来查找这些内容。

于 2013-07-04T15:41:46.930 回答