通常情况下,如果有两个同名变量,一个是全局的,另一个是局部的,那么局部变量在其作用域内具有较高的优先权,它将屏蔽全局变量。
eg:
#include<iostream>
using namespace std;
int avar = 10;
int main()
{
int avar;
avar = 25;
cout << "avar is" << avar << endl;
return 0;
}
输出结果为:
avar = 25
此时,在main函数的输出语句中 ,使用的变量avar是main函数内定义的局部变量,因此打印的是局部变量avar的值。
如果希望在局部变量的作用域内使用同名的全局变量,可以在该变量前加上“::”,此时::avar代表全局变量avar,“::”称为作用域运算符。
eg:
#include<iostream>
using namespace std;
int avar;
int main()
{
int avar;
avar = 25; //给局部变量avar赋值
::avar = 10; //给全局变量avar赋值
cout << "local avar = " << avar << endl;
cout << "global avar = " << ::avar << endl;
return 0;
}
程序运行结果如下:
local avar = 25
global avar = 10
从这个例子可以看出,作用域运算符可用来解决局部变量与全局变量的重名问题,即在局部变量的作用域内,可用“::”对被屏蔽的同名全局变量进行访问。