C ++ 11中的Unicode标识符和源代码?

问题描述

| 我在新的C ++标准中找到了
2.11 Identifiers                  [lex.name]
identifier:
    identifier-nondigit
    identifier identifier-nondigit
    identifier digit
identifier-nondigit:
    nondigit
    universal-character-name
    other implementation-defined character
与其他文字   标识符是字母和数字的任意长序列。标识符中的每个通用字符名称应指定一个字符,其字符在ISO 10646中的编码属于指定的范围之一   在E.1。 [...] 我不太理解这是什么意思。从旧的标准输入法开始,我习惯于将“通用字符名称”写为“ 1”。但是在标识符中使用那些...?真? 新标准对Unicode开放了吗?而且我没有提到新的文字类型
\"uHello \\u89ab thing\"u32
,我认为我理解这些。但: (便携式)源代码可以采用任何Unicode编码,例如UTF-8,UTF-16或任何(无论如何定义)代码页吗? 我可以在其中写
myfu\\u1234ntion
的标识符吗(出于任何目的) 或者我可以使用Unicode定义的\“字符名称\”,如ICU中那样。
const auto x = \"German Braunb\\U{LOWERCASE LETTER A WITH DIARESIS}r.\"u32;
甚至在源代码本身的标识符中?那会是一种享受...咳嗽... 我认为所有这些问题的答案都是“否”,但我不能可靠地将其映射到标准中的措辞... :-) 编辑:我发现\“ 2.2翻译阶段[lex.phases] \”,阶段1:   必要时,以实现定义的方式将物理源文件字符映射到基本源字符集。接受的物理源文件字符集是实现定义的。 [...]基本文件中没有的任何源文件字符   源字符集(2.3)替换为指定该字符的通用字符名称。 (一个实现可以使用任何内部编码,只要在源文件中遇到了实际的扩展字符,并且在源文件中以通用字符名表示相同的扩展字符(即,使用\\ uXXXX表示),等同地处理,除非此替换以原始字符串文字形式还原。) 通过阅读本文,我现在认为,编译器可以选择接受UTF-8,UTF-16或希望的任何代码页(通过元信息或用户配置)。在阶段1中,它将其转换为ASCII格式(\“基本源字符集\”),然后用
\\uNNNN
表示法替换Unicode字符(或者编译器可以选择继续以Unicode表示法工作,因此必须确保它以相同的方式处理其他“ 6”。 你怎么看?     

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)