在线文档教程
C++
语言 | Language

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 new29%;

  • 用户定义的转换函数名%28operator bool29%;

  • 用户定义的文字运算符名%28operator "" _km29%;

  • 模板名,后面跟着其参数列表%28MyTemplate<int>29%。

表示实体的每个名称都由声明.表示标签的每个名称都由后藤声明或由标记语句.在多个翻译单位中使用的名称可能指相同或不同的实体,具体情况取决于联动...

当编译器在程序中遇到一个未知名称时,它会将它与通过名称查找,除了相依名称在这些名称的模板声明和定义%28中,编译器确定它们是命名类型、模板还是其他可能需要的实体显式消歧29%。

标识符中的Unicode字符

在标识符中允许使用下列Unicode字符范围:

Code pointsDescriptionCharacters
U+00A8DIARESIS¨
U+00AAFEMININE ORDINAL INDICATORª
U+00ADSOFT HYPHEN­
U+00AFMACRON¯
U+00B2 - U+00B5SUPERSCRIPT TWO - MICRO SIGN²³´µ
U+00B7 - U+00BAMIDDLE DOT - MASCULINE ORDINAL INDICATOR·¸¹º
U+00BC - U+00BEVULGAR FRACTION ONE QUARTER - VULGAR FRACTION THREE QUARTERS¼½¾
U+00C0 - U+00D6LATIN CAPITAL LETTER A WITH GRAVE - LATIN CAPITAL LETTER O WITH DIAERESISÀÁÂ...ÔÕÖ
U+00D8 - U+00F6LATIN CAPITAL LETTER O WITH STROKE - LATIN SMALL LETTER O WITH DIAERESISØÙÚ...ôõö
U+00F8 - U+167FLATIN SMALL LETTER O WITH STROKE - CANADIAN SYLLABICS BLACKFOOT Wøùú...ᙽᙾᙿ
U+1681 - U+180DOGHAM LETTER BEITH - MONGOLIAN FREE VARIATION SELECTOR THREEᚁᚂᚃ...᠋᠌᠍
U+180F - U+1FFFSYRIAC LETTER BETH - GREEK DASIA᠏ܒܓ...´῾?
U+200B - U+200DZERO WIDTH SPACE - ZERO WIDTH JOINER​‌‍
U+202A - U+202ELEFT-TO-RIGHT EMBEDDING - RIGHT-TO-LEFT OVERRIDE
U+203F - U+2040UNDERTIE - CHARACTER TIE‿⁀
U+2054INVERTED UNDERTIE
U+2060 - U+218FWORD JOINER - TURNED DIGIT THREE...↉↊↋
U+2460 - U+24FFCIRCLED DIGIT ONE - NEGATIVE CIRCLED DIGIT ZERO①②③...⓽⓾⓿
U+2776 - U+2793DINGBAT NEGATIVE CIRCLED DIGIT ONE - DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN❶❷❸...➑➒➓
U+2C00 - U+2DFFGLAGOLITIC CAPITAL LETTER AZU - COMBINING CYRILLIC LETTER IOTIFIED BIG YUSⰀⰁⰂ...
U+2E80 - U+2FFFCJK RADICAL REPEAT - IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID⺀⺁⺂...⿹⿺⿻
U+3004 - U+3007JAPANESE INDUSTRIAL STANDARD SYMBOL - IDEOGRAPHIC NUMBER ZERO〄々〆〇
U+3021 - U+302FHANGZHOU NUMERAL ONE - HANGUL DOUBLE DOT TONE MARK〡〢〣...
U+3031 - U+D7FFVERTICAL KANA REPEAT MARK - HANGUL JONGSEONG PHIEUPH-THIEUTH...
U+F900 - U+FD3DCJK COMPATIBILITY IDEOGRAPH-F900 - ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM豈更車...ﴻﴼﴽ
U+FD40 - U+FDCFARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM -ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
U+FDF0 - U+FE44ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM -PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET...﹂﹃﹄
U+FE47 - U+FFFDPRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET - REPLACEMENT CHARACTER﹇﹈﹉...�
U+10000 - U+1FFFDLINEAR 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+EFFFDLANGUAGE TAG (U+E0001) - VARIATION SELECTOR-256 (U+E01EF)

以下Unicode字符范围不允许开始标识符:

Code pointsDescriptionCharacters
U+0300 - U+036FCOMBINING GRAVE ACCENT - COMBINING LATIN SMALL LETTER X
U+1DC0 - U+1DFFCOMBINING DOTTED GRAVE ACCENT - COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
U+20D0 - U+20FFCOMBINING LEFT HARPOON ABOVE - COMBINING ASTERISK ABOVE
U+FE20 - U+FE2FCOMBINING LIGATURE LEFT HALF - COMBINING CYRILLIC TITLO RIGHT HALF

另见

C标识符文档

*。

© cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

http://en.cppreference.com/w/cpp/language/name