1119-作用域解析运算符 : : 之 全局作用域解解析
当我们在声明了一个全局变量与一个局部变量,并且恰好这两个变量同名了,那我们可以使用 :: 作用域解析运算符来访问不同的变量。
代码示例:
#include<iostream>
using namespace std;
int a=10;
int main()
{
int a=20;
cout<<"a="<<a<<endl;
}
这样我们运行出来的结果是 20 。因为同名变量考虑的是就近原则。
那如何运行出全局变量的10呢?我们只需要在输出a前面加 :: 就可以了。代码如下
#include<iostream>
using namespace std;
int a=10;
int main()
{
int a=20;
cout<<"a="<<::a<<endl;
}
这样我们的输出结果就是10。
using namespace std意思是使用标准命名空间,如果我们不加这一行代码的话,我们就需要用作用域符来标定了标准输入与标准输出了 cin cout。否则程序会报错,这也是作用域符的一个作用。
#include<iostream>
//using namespace std;
int a=10;
int main()
{
int a=20;
std::cout<<"a="<<::a<<std::endl;
}
我们可以做自己的命名空间,访问自己命名空间里的变量需要作用域符(注意,自定义命名空间只能在全局范围)
#include<iostream>
using namespace std;
namespace A{
int a=520;//A命名空间
}
namespace B{
int a=1314;//B命名空间
}
int a=10;//全局
int main()
{
int a=20;//局部
cout<<"局部a="<<a<<endl;
cout<<"全局a="<<::a<<endl;
cout<<"A:a="<<A::a<<endl;
cout<<"B:a="<<B::a<<endl;
}
运行结果如图:
作用域符的作用不止这些,我们后续继续讲解。