首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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 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标识符文档

*。

代码语言:txt
复制
 ? cppreference.com

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

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com