C++中标识符名称的规则是:
- 不能以数字开头
- 可由字母、数字、下划线、通用字符名1和实现定义字符组成
- 不能是关键字。
C++ 标准草案中涵盖这一点的部分是标识符2.11
,其中包括以下语法:
identifier:
identifier-nondigit <- Can only start with a non-digit
identifier identifier-nondigit <- Next two rules allows for subsequent
identifier digit <- characters to be those outlined in 2 above
identifier-nondigit:
nondigit <- a-z, A-Z and _
universal-character-name
other implementation-defined characters
[...]
和2.12
关键字解释了所有保留用作关键字的标识符。
最后,还保留了以下名称:
- 包含双下划线的名称,或在任何范围内
__
以下划线后跟大写字母(如)开头的名称,_Apple
_apple
在全局命名空间(如在全局命名空间)中以下划线开头的名称是保留的。
标准草案中涵盖此内容的部分是17.6.4.3.2
. 我们可以从Rationale for International Standard-Programming Languages-C中找到为什么保留这些的理由,其中说:
[...]这为编写大量幕后的非外部宏和函数提供了一个名称空间,库需要正确完成其工作 [...]
如本例所示,在C++中,这也适用于 名称修饰。
脚注
允许的通用字符包含在Annex E.1
:
E.1 允许的字符范围 [charname.allowed]
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-DFFFD-C0000-CF DFFFD, E0000-EFFFD