Identifiers
标识符
安标识符
是数字、下划线、小写和大写拉丁字母的任意长序列,大多数Unicode字符%28参见下面的详细信息%29。有效标识符
必须以%28拉丁字母、下划线或Unicode非数字字符%29开头.。标识符
是区分大小写和大写字母的%29,每个字符都很重要。
注:C++语法正式要求Unicode字符为逃出带着\u
或\U
,但由于翻译阶段1,这正是源代码中的原始Unicode字符如何呈现给编译器的方式。还请注意,对此功能的支持可能是有限的。海合会...
在声明中
可以使用标识符。指名道姓对象、引用、函数、枚举数、类型、类成员、命名空间、模板、模板专门化、参数包、goto标签和其他实体,但有以下例外:
- 标识符关键词不能用于其他目的;
- 保留带有双下划线的标识符;
- 保留以下划线开头的以大写字母开头的标识符;
- 以下划线开头的标识符保留在全局命名空间中。
这里的“保留”意味着标准库标头#定义或声明这些标识符以满足其内部需求,编译器可以预定义这类非标准标识符,而名称损坏算法可能假定这些标识符中的一些不在使用中。如果程序员使用这些标识符,则行为是未定义的。
此外,它的%27未定义行为#定义或#undef名称相同关键词如果至少包含一个标准库标头,则与在任何标准库标头中声明的名称相同的#Defined或#undef标识符的未定义行为为%27。
在表达式中
命名变量、函数或枚举数的标识符可用作表达由标识符组成的表达式返回由标识符命名的实体。大价值范畴的表达式是洛值
如果标识符命名函数、变量或数据成员,则prvalue
否则,%28等。安枚举器是prvalue
表达式%29。
在非静态物体的体内成员函数,每个命名非静态成员的标识符都被隐式转换为类成员访问表达式。this->member...
不合格标识符
除了适当声明的标识符外,下列内容也可用于具有相同角色的表达式:
- 安过载算子函数表示法中的名称,如
operator+
或operator new
;
- 阿用户定义的转换函数名称,如
operator bool
;
- 阿用户定义的文字运算符名称,如
operator "" _km
;
- 阿模板名称后面跟着它的参数列表,例如MyTemplate<int>;
- 人物
~
后面跟着类名,例如~MyClass
;
- 人物
~
后面是解密型说明符,例如~decltype(str)
...
与标识符一起被称为不合格id-表达式
...
合格标识符
阿合格id-表达式
是由范围解析运算符预先加上的不合格id表达式。::
,并且可以选择枚举序列,%28自C++11%29类或命名空间名称或decltype
表达式%28,因为C++11%29由范围解析运算符分隔。例如,表达式std::string::npos
为静态成员命名的表达式。npos
在班上string
在命名空间中std
.表达::tolower
命名函数tolower
在全局命名空间中。表达::
std::cout
命名全局变量cout
在命名空间中std
,这是一个顶级命名空间。表达boost::signals2::connection
命名类型connection
在命名空间中声明signals2
,它在命名空间中声明。boost
...
关键词template
可能出现在限定标识符中,以消除歧义。相关模板名...
见合格查找有关名称查找限定标识符的详细信息。
人名
阿名称
是否使用下列之一来指实体或标签:
- 标识符;
- 函数符号%28中的重载运算符名
operator+
,,,operator new
29%;
- 用户定义的转换函数名%28
operator bool
29%;
- 用户定义的文字运算符名%28
operator "" _km
29%;
- 模板名,后面跟着其参数列表%28MyTemplate<int>29%。
表示实体的每个名称都由声明.表示标签的每个名称都由后藤声明或由标记语句.在多个翻译单位中使用的名称可能指相同或不同的实体,具体情况取决于联动...
当编译器在程序中遇到一个未知名称时,它会将它与通过名称查找,除了相依名称在这些名称的模板声明和定义%28中,编译器确定它们是命名类型、模板还是其他可能需要的实体显式消歧29%。
标识符中的Unicode字符
在标识符中允许使用下列Unicode字符范围:
Code points | Description | Characters |
---|---|---|
U+00A8 | DIARESIS | ¨ |
U+00AA | FEMININE ORDINAL INDICATOR | ª |
U+00AD | SOFT HYPHEN | |
U+00AF | MACRON | ¯ |
U+00B2 - U+00B5 | SUPERSCRIPT TWO - MICRO SIGN | ²³´µ |
U+00B7 - U+00BA | MIDDLE DOT - MASCULINE ORDINAL INDICATOR | ·¸¹º |
U+00BC - U+00BE | VULGAR FRACTION ONE QUARTER - VULGAR FRACTION THREE QUARTERS | ¼½¾ |
U+00C0 - U+00D6 | LATIN CAPITAL LETTER A WITH GRAVE - LATIN CAPITAL LETTER O WITH DIAERESIS | ÀÁÂ...ÔÕÖ |
U+00D8 - U+00F6 | LATIN CAPITAL LETTER O WITH STROKE - LATIN SMALL LETTER O WITH DIAERESIS | ØÙÚ...ôõö |
U+00F8 - U+167F | LATIN SMALL LETTER O WITH STROKE - CANADIAN SYLLABICS BLACKFOOT W | øùú...ᙽᙾᙿ |
U+1681 - U+180D | OGHAM LETTER BEITH - MONGOLIAN FREE VARIATION SELECTOR THREE | ᚁᚂᚃ...᠋᠌᠍ |
U+180F - U+1FFF | SYRIAC LETTER BETH - GREEK DASIA | ᠏ܒܓ...´῾? |
U+200B - U+200D | ZERO WIDTH SPACE - ZERO WIDTH JOINER | |
U+202A - U+202E | LEFT-TO-RIGHT EMBEDDING - RIGHT-TO-LEFT OVERRIDE | |
U+203F - U+2040 | UNDERTIE - CHARACTER TIE | ‿⁀ |
U+2054 | INVERTED UNDERTIE | ⁔ |
U+2060 - U+218F | WORD JOINER - TURNED DIGIT THREE | ...↉↊↋ |
U+2460 - U+24FF | CIRCLED DIGIT ONE - NEGATIVE CIRCLED DIGIT ZERO | ①②③...⓽⓾⓿ |
U+2776 - U+2793 | DINGBAT NEGATIVE CIRCLED DIGIT ONE - DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN | ❶❷❸...➑➒➓ |
U+2C00 - U+2DFF | GLAGOLITIC CAPITAL LETTER AZU - COMBINING CYRILLIC LETTER IOTIFIED BIG YUS | ⰀⰁⰂ... |
U+2E80 - U+2FFF | CJK RADICAL REPEAT - IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID | ⺀⺁⺂...⿹⿺⿻ |
U+3004 - U+3007 | JAPANESE INDUSTRIAL STANDARD SYMBOL - IDEOGRAPHIC NUMBER ZERO | 〄々〆〇 |
U+3021 - U+302F | HANGZHOU NUMERAL ONE - HANGUL DOUBLE DOT TONE MARK | 〡〢〣... |
U+3031 - U+D7FF | VERTICAL KANA REPEAT MARK - HANGUL JONGSEONG PHIEUPH-THIEUTH | ... |
U+F900 - U+FD3D | CJK COMPATIBILITY IDEOGRAPH-F900 - ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM | 豈更車...ﴻﴼﴽ |
U+FD40 - U+FDCF | ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM -ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM | |
U+FDF0 - U+FE44 | ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM -PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET | ...﹂﹃﹄ |
U+FE47 - U+FFFD | PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET - REPLACEMENT CHARACTER | ﹇﹈﹉...� |
U+10000 - U+1FFFD | LINEAR B SYLLABLE B008 A - CHEESE WEDGE (U+1F9C0) | |
U+20000 - U+2FFFD | <CJK Ideograph Extension B, First> - CJK COMPATIBILITY IDEOGRAPH-2FA1D (U+2FA1D) | |
U+30000 - U+3FFFD | | |
U+40000 - U+4FFFD | | |
U+50000 - U+5FFFD | | |
U+60000 - U+6FFFD | | |
U+70000 - U+7FFFD | | |
U+80000 - U+8FFFD | | |
U+90000 - U+9FFFD | | |
U+A0000 - U+AFFFD | | |
U+B0000 - U+BFFFD | | |
U+C0000 - U+CFFFD | | |
U+D0000 - U+DFFFD | | |
U+E0000 - U+EFFFD | LANGUAGE TAG (U+E0001) - VARIATION SELECTOR-256 (U+E01EF) | |
以下Unicode字符范围不允许开始标识符:
Code points | Description | Characters |
---|---|---|
U+0300 - U+036F | COMBINING GRAVE ACCENT - COMBINING LATIN SMALL LETTER X | |
U+1DC0 - U+1DFF | COMBINING DOTTED GRAVE ACCENT - COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW | |
U+20D0 - U+20FF | COMBINING LEFT HARPOON ABOVE - COMBINING ASTERISK ABOVE | |
U+FE20 - U+FE2F | COMBINING LIGATURE LEFT HALF - COMBINING CYRILLIC TITLO RIGHT HALF | |
另见
C标识符文档
*。
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。