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
Keywordsは、キーワードとして使用するために予約されているすべての識別子を説明しています。
最後に、次の名前も予約されています。
- 二重アンダースコアを含む名前、または任意のスコープで
__
アンダースコアの後に大文字(のような)が続く名前。_Apple
- (グローバル名前空間のように)グローバル名前空間でアンダースコアで始まる
_apple
名前は予約されています。
ドラフト標準でこれをカバーするセクションはです17.6.4.3.2
。これらが国際標準の理論的根拠—プログラミング言語—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、C0000-CFFFD、D0000- DFFFD、E0000-EFFFD