C++|八类标识符作用域(Identifier Scope)

作者&投稿:高孔 (若有异议请与网页底部的电邮联系)
~

标识符(identifier)是程序中变量、类型、函数和标号的名称,它可以由程序设计者命名,也可以由系统指定。标识符由字母、数字和下划线组成,第一个字符不能是数字。

通常来说,一段程序代码中所用到的标识符(名字)并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域(scope)。

作用域的使用能够提高程序逻辑的局部性,增强程序的可靠性,减少名字冲突。

对于C++来说,符号{}可以界定标识符的scope,关键字extern、static也可以拓宽或限制标识符的作用域。同时,类名、命名空间也可以限制标识符的作用域。

典型的具有全局作用域的名字,包括:全局变量、全局函数等。

Use of global variables is generally discouraged. It makes your program more difficult to understand, and harder to debug. But sometimes using a global variable is acceptable.

通常不鼓励使用全局变量。它使您的程序更难理解,也更难调试。但有时使用全局变量是可以接受的。

Function scope is the special scope for labels. This is due to their unusual property. A label is visible through the entire function it is defined and one can jump (using instruction gotolabel) to it from any point in the same function.

函数作用域是标号的特殊范围。这是因为它们的特殊属性。标号在定义的整个函数中都是可见的,可以从同一函数中的任意点跳转(使用指令gotolabel)到它。

Labels such as CLEANUP1 and CLEANUP2 are special identifiers that behave differently from all other identifiers. They are visible from everywhere inside the function, even in places that are executed before the labeled statement, or even in places that could never be reached if none of the goto is executed. Labels are often written in lower-case rather than upper-case.

CLEANUP1和CLEANUP2等标号是特殊标识符,其行为与所有其他标识符不同。它们在函数内部的任何地方都是可见的,甚至在标记语句之前执行的地方,或者如果没有执行goto,就永远无法到达的地方。标号通常用小写字母而不是大写字母书写。

An identifier has block scope if its corresponding declaration appears inside a block (parameter declaration in function definition apply). The scope ends at the end of the corresponding block.

No different entities with the same identifier can have the same scope, but scopes may overlap. In case of overlapping scopes the only visible one is the one declared in the innermost scope.

使用限定符::,可以在命名空间名字的作用域内访问该命名空间的成员名字。

C++引入了无名命名空间(unnamednamespace),其作用域即为当前编译单元。例如:

namespace {int i;}

也可以通过前面加上::限定访问文件作用域中的名字。

类静态数据成员具有外部链接属性。

类的成员名字在其所在的类作用域内、或者派生类作用域内可见,或者通过 .运算符、->运算符、::限定符访问。

匿名类的作用域, 这里的匿名类是指匿名struct、匿名class、匿名union,且没有直接用这种类型定义变量。如果紧随这些无名类型的定义之后,定义了该类型的变量,则类型的定义及使用与普通情况完全一样;严格说,这种情形可以不算是匿名类。

匿名类作为嵌套类,即匿名类在一个外部类的内部定义:则编译器就在此处定义一个该匿名类的无名变量,并把该匿名类的成员的名字提升到该类型定义所在的外部类的作用域内。由于匿名类不能使用点运算符访问其成员,所以匿名类只能有数据成员,不允许有成员函数,也不能包含私有或受保护的数据成员。如果匿名类的定义是连续嵌套,则最内部的匿名类的成员名字被提升至最外部的非匿名类或可用变量访问的成员类之处。

匿名类不作为嵌套类定义,即匿名类定义在一个全局函数内部或者全局函数外部。C/C++语言标准只允许匿名union在这种情形下定义;如果是匿名struct、匿名class,则编译报错。对于此种情形的匿名union,编译器同样在此处定义一个该匿名联合的无名变量,并把该匿名联合的成员的名字提升到该匿名联合所在的作用域内,匿名联合只能有数据成员,不允许有成员函数,也不能包含私有或受保护的数据成员。在函数外的匿名联合只能在当前编译单元内可见,因此必须使用static关键字,或者必须放在匿名命名空间中。

例如:

C语言规定,枚举类型的成员(enumerator)的可见范围被提升至该枚举类型所在的作用域内。这被认为有可能污染了外部的作用域。为此,C++11引入了枚举类(enum class)解决此问题。

-End-




C++|八类标识符作用域(Identifier Scope)
标识符(identifier)是程序中变量、类型、函数和标号的名称,它可以由程序设计者命名,也可以由系统指定。标识符由字母、数字和下划线组成,第一个字符不能是数字。通常来说,一段程序代码中所用到的标识符(名字)并不总是有效\/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域(scope)。

如何规范标识符名?
一、字母开头:标识符必须以字母,包括大写字母和小写字母或下划线开头,不能以数字或其他特殊字符开头,例如合法的标识符可以是姓名或数字。二、区分大小写:标识符是区分大小写的,也就是说大写字母和小写字母被视为不同的字符。例如,变量name和变量Name是两个不同的标识符,它们表示不同的变量。三、...

C语言知识总结
关系运算符 > < == >= <= !=逻辑运算符 ! && ||位运算符 << >> ~ | ^ &赋值运算符 = 及其扩展赋值运算符条件运算符 ? :逗号运算符 ,指针运算符 * &求字节数运算符 sizeof强制类型转换运算符 (类型)分量运算符 . ->下标运算符 [ ]其他 如函数调用运算符()运算符的优先级由高到低:单目运算...

free pascal中强制把非整型数转化为整型的函数?
1、PASCAL语言的字符表 是ASCII字符集,主要有:⑴26个英文字母(不分大小写)⑵十个数字符号 ⑶特殊符号。如+-*\/=><][:;.等 2、标识符 以字母开头的字母数字序列(大小写等效,可跟下划线_),用来标识常量、变量、程序、函数等。自定义标识符时要注意遵循此规则。3、标准标识符与保留字 标准...

&是什么字符
C++中引用的声明方法:类型标识符 &引用名=目标变量名,&在此不是求地址运算,而是起标识作用。编辑本段滨崎步第29张单曲:& 《&》是日本歌手滨崎步第29张单曲,本作销售累计达59万张,是滨崎步至2009年4月为止,最后一张突破40万张销售的单曲。 唱片封面 单曲名称:& 歌手:滨崎步 发行时间:2003...

下列哪些是词法记号?关键字 注释 空白符 八进制常量 三字符序列 字符串...
1、关键字 关键字是系统已预定义的单词,它们在程序中表达特定的含义。如:auto break continue return static typedef void virtual 2、标识符 标识符是程序员用来命名程序中一些实体的一种单词。使用标识符可以定义函数名、类名、对象名、变量名、常量名、类型名、和语句标号名等。定义标识符要注意以下...

符号“&”什么意思?
& 是和、与的意思,英文符号相当与and这个词。字符 & 的最早历史可以追溯到公元1世纪,是拉丁语 et 的连写。最早的 & 很像 E 和 T 的组合,但随着印刷技术的发展,这个符号逐渐形成自己的样式,并脱离其原始的影子。

调类的标记符号是什么
上面的易容术其实用到的是Windows中的文件标识符,其英文名触是CLSID,也称类标识符,位于注册表的[HKEY_LOCAL_MACHINE\\Software\\Classes\\CLSID]下,通常由32个十六进制数构成,其一般格式是“{八位数-四位数-四位数-四位数-十二位数}”。我们操作电脑时,会对系统程序名称发出指令,Windows则通过对该程序...

这个符号&是什么意思?读音怎么读?
&是一个逻辑语言,是指逻辑上表示两者属于缺一不可的关系,还表示意思是一个人和另外一个人之意,与and同义。读音:and & 包含在任何罗马字体中,在现代语文中被频繁使用。在当代,& 用来替代单词 “And”,在编程语言(如 MySQL, C and C++, XML, SGML, and BASIC)中,它的意思是 “与”。

学生必看c语言必看常见符号分类集合贴
2、标识符 标识符分为系统预定义标识符和用户自定义标识符两类。 顾名思义,系统预定义标识符就是由系统预先定义好的,例如主函数main和输出函数printf等等。与关键字不同的是,系统预定义标识符是可以由用户重新定义的,但是这样会于原来的定义产生冲突,原来的含义会被替换,所以不建议这样用! 用户自定义标识符是由...

甘井子区19658191624: c++标识符的四种作用域 -
晁鲁阿昔: 你说的它是作域标识符没有错,当::的前面没有任何对象时,它代表后面的对象或函数是全局的.

甘井子区19658191624: C++标志符的五种作用域是什么 -
晁鲁阿昔: 不同的标识符有着不同的作用域.按作用域的大小可分为如下5种,从大到小依次为: ·程序级 ·文件级 ·类级 ·函数级 ·程序块级

甘井子区19658191624: C++作用域的判别
晁鲁阿昔: 呵呵 你问的问题还挺全的,我是这样理解的,希望对你有帮助! 1.函数作用域 其作用域始于函数头“{”结束于“}” 2.函数原型作用域 函数原型中的参数,其作用域始于“(”结束于“)” 如下函数原型声明语句 double Area(double radius); ...

甘井子区19658191624: 在C++中,::的作用是什么?是用于类的后面么? -
晁鲁阿昔: 作用域标识符 标识一个变量或函数属于哪个名字空间,或者结构,类等

甘井子区19658191624: c++“::”标识符的意思 -
晁鲁阿昔: :: 符号 , 左边的表示类名或者命名空间,右边是方法或者属性变量.也可以叫做附属于吧 比如定义一个类,Test,里面有个方法print 那么可以通这个访问Test::print(); 常用于类的实现 当然也可以用于命名空间,比如常用的标准输入输出,std:cout std::cin

甘井子区19658191624: 标识符是什么? -
晁鲁阿昔: 标识符(identifier)是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义. 相关介绍: 在计算机编程语言中,标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系.标...

甘井子区19658191624: c++中变量标识符命名规则 -
晁鲁阿昔: 命名规则比较著名的命名规则当推Microsoft公司的“匈牙利”法,该命名规则的主要思想是“在变量和函数名中加入前缀以增进人们对程序的理解”.例如所有的字符变量均以ch为前缀,若是指针变量则追加前缀p.如果一个变量由ppch开头,...

甘井子区19658191624: C++标识符的作用域和可见性、生存期有什么区别?? -
晁鲁阿昔: 基本上一回事, 特别一点的大概是函数里的static变量, 可见性是在函数里, 生存期是整个运行周期

甘井子区19658191624: C++中::是什么意思 -
晁鲁阿昔: 作用域操作符,用来划分名字的所在区间,它是为了解决名称冲突而设计的,比如A公司和B公司可能同有一个库有函数名为xxx();如果C公司同时使用这两个库,则会发生名字冲突,用名称空间的话,A、B公司分别把该函数放在各自定义的名称空间里,就能避免冲突,加入名称空间就是公司名,就可以分别调用A::xxx()和B::xxx().类层次和函数也能够成名称空间.

甘井子区19658191624: C++每个系统标识符的意思是什么 -
晁鲁阿昔: 标识符的命名规则: 1. 所有标识符必须由一个字母(a~z或A~Z)或下划线(_)开头; 2. 标识符的其它部分可以用字母、下划线或数字(0~9)组成; 3. 大小写字母表示不同意义, 即代表不同的标识符,如前面的cout和Cout; 在定义标识符时...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网