Ответ 1
Правила для имен идентификаторов в С++:
- Он не может начинаться с числа
- Может состоять из букв, цифр, подчеркивания, универсальных имен символов 1 и определенных символов реализации
- Не может быть keyword.
Разделы в уровне проекта С++, которые охватывают это: 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
. Мы можем найти обоснование того, почему они зарезервированы из Обоснование для международных языков стандартного программирования-C, в котором говорится:
[...] Это дает пространство имен для написания многочисленных за кадром внеземных макросов и функций, которые библиотека должна выполнять свою работу должным образом [...]
В С++ это также относится к name mangling как это example показывает.
Сноска
- 1. Разрешенные универсальные символы
Универсальные символы, которые разрешены, покрываются в 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