August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
作用域(scope)是一个程序文本区域。每个名字都定义在一个作用域中,在声明点到作用域结束的区间内有效。例如:
名字在其声明的定义域嵌套的定义域中也有效。例如,上面代码中对f()的调用在g()的作用域中,此作用域嵌套于全局作用域。全局作用域不在任何其他作用域内。名字必须先声明后使用的规则在这里还是适用的,因此f()不能调用g()。
C++支持多种类型的作用域,帮助我们控制变量在哪里可用:
·全局作用域(global scope):在任何其他作用域之外的程序区域。
·名字空间作用域(namespace scope):一个名字空间作用域嵌套于全局作用域或另一个名字空间作用域中,参见8.7节。
·类作用域(class scope):一个类内的程序区域,参见9.2节。
·局部作用域(local scope):位于{...}大括号之间或函数参数列表中的程序区域。
·语句作用域(statement scope):例如,for语句内的程序区域。
作用域的主要作用是保持名字的局部性,使之不影响声明于其他地方的名字。例如:
下图描述了上面代码中的作用域信息:
这段代码中,f()里的x与g()里的x是不一样的。它们不会冲突,因为不在同一个作用域中:f()里的x在f的局部作用域中,而g()里的x在g的局部作用域中。位于同一个作用域中,不能共存的两个声明被称为冲突(clash)。类似地,在g()中定义、使用的f(显然)不是全局函数f()。 ...