以下是The Standard ([lex.phases])的说法:
物理源文件字符以一种实现定义的方式映射到基本源字符集中(如果需要,引入换行符作为行末指示符)。所接受的物理源文件字符集是由实现定义的。
因此,您特定的实现支持该功能,但不能保证可移植到任何其他实现中。
如果您查看本文的附录E,您会发现有一些Unicode范围允许用作变量名。这些范围包括:
00A8、00AA、00AD、00AF、00B2-00B5、00B7-00BA、00BC-00BE、00C0-00D6、00D8-00F6、00F8-00FF、0100-167F、1681-180D、180F-1FFF、200B-200D、202A-202E、203F-2040、2054、2060-206F、2070-218F、2460-24FF、2776-2793、2C00-2DFF、2E80-2FFF、3004-3007、3021-302F、3031-303F、3040-D7FF、F900-FD3D、FD40-FDCF、FDF0-FE44、FE47-FFFD、10000-1FFFD、20000-2FFFD、30000-3FFFD、40000-4FFFD、50000-5FFFD、60000-6FFFD、70000-7FFFD、80000-8FFFD、90000-9FFFD、A0000-AFFFD、B0000-BFFFD、C0000-CFFFD、D0000-DFFFD、E0000-EFFFD。看起来,根据MSDN的说法,定义标识符时似乎没有任何限制Unicode字符的使用:
struct テスト // Japanese 'test'
{
void トスト() {} // Japanese 'toast'
};
int main() {
テスト \u30D1\u30F3; // Japanese パン 'bread' in UCN form
パン.トスト(); // Compiler recognizes UCN or literal form
}
我很失望cplusplus.com没有提到这个。
é
,更不用说й
了。 - Neven V.