名字的有效区域始于名字的声明语句,以声明语句所在的作用域末端为结束。
名字main定义于所有的花括号之外,它和大多数定义在函数体之外的名字一样有全局作用域。一旦声明之后,全局作用域的名字在整个程序的范围内都能使用
如果定义在for语句内,在for语句内可以访问,但是在其他部分就不能访问了。
#include<iostream>
using namespace std;
int reused=42; //reused拥有全局作用域
int main()
{
int unique=0;
cout<<reused<<' '<<unique<<endl; //输出42 0
int reused=0;
cout<<reused<<' '<<unique<<endl; //输出0 0
cout<<::reused<<' '<<unique<<endl; //输出42 0
return 0;
}
可以看到,定义了一个同名的局部变量后,原全局变量并没有被覆盖,可以通过域操作符::来覆盖默认的作用域规则,因为全局作用域本身没有名字,所以当作用域操作符左侧为空时, 向全局作用域发出请求获取作用域操作符右侧名字对应的变量。
-------------------------44--------------------------------