域作用符
域作用符主要用来限定变量的作用域
比如:
#include<iostream>
#include "string.h"
using namespace std;
int num = 10; //全局空间
int main()
{
int num = 20; //栈空间
cout << "当前num的值为:"<<num << endl;
system("pause");
return 0;
}
可以看出第一个num是全局变量作用域为全局空间,第二个num是临时变量作用域为函数内部,因为两个变量都为num那么输出时会输出哪个num的只呢?
程序执行结果显示最终输出的是第二个num,因为输出语句和第二个num在同一个函数内部,输出时会选择离它近的输出,也就相当于在函数内部第二个num将第一个num覆盖了。
但是如果我要输出第一个num也就是全局变量num该怎么办呢?
#include<iostream>
#include "string.h"
using namespace std;
int num = 10; //全局空间
int main()
{
int num = 20; //栈空间
cout << "当前num的值为:" <<::num << endl;
system("pause");
return 0;
}
执行结果:
可以看出我只是在num前面加了 :: 输出结果就变成了全局变量的num了;
域访问符::
::用来表明你要访问的变量所在的域,如果左边为空的话表示全局作用域的变量,经常搭配命名空间使用。
命名空间namespace
通过以上问题可以知道在编程过程中可能会遇到变量名重复的状况,为了区别使用重名的变量就要在域访问符前面加上变量的域,但仅仅全局域和临时变量在函数内部的局部域显然是不够用的。所以为了解决这个问题,引入了命名空间这个概念,通过使用
namespace xxx;你所使用的库函数或变量就是在该命名空间中定义的,这样一来就不会引起不必要的冲突了。
#include<iostream>
#include "string.h"
using namespace std;
int num = 10; //全局空间
namespace test
{
int num = 100;
}
int main()
{
int num = 20; //栈空间
cout << "全局变量:" <<:: num << endl;
cout << "局部变量:" << num << endl;
cout<<"test命名空间变量:"<<test::num << endl;
system("pause");
return 0;
}
从上图可以看出使用命名空间很好地区分使用了各个重名的变量。
std是一个很特殊的命名空间,它里面所有的变量以及函数都是c++标准库里的变量以及函数。