C++中的命名空间
做题的时候经常看见C++中有一行:using namespace std;
不是很明白,就去网上查了一查,写下这篇博文大致解释一下。
1. 命名空间的由来
C++中如果有必须的标识重名了,那么该如何区分它们?为了处理这样的情况,引入namespace的概念,将重名的标识名,分别放入不同的namespace中,以区别使用。
2. 使用std中的标识
方式1——空间名::标识名
#include <iostream>
int main(){
std::cout<<"Hello World"<< std::endl;
return 0;
}
方式2——using namespace std;
#include <iostream>
using namespace std;//引入命名空间
int main(){
cout << "Hello World" << endl;//等价于上一行
return 0;
}
我们可以发现输出是相同的,
也就是说在using namespace std之后,std中的内容我们可以直接使用,而不用在前面加上std::XXX【有作用域的】
3. 模拟
我们可以举一个例子,自己设置空间的内容,来模拟一下
#include<iostream>
using namespace std;
namespace a
{
int b=5;
}
namespace c
{
int b=8;
}
namespace d
{
int b=9;
}
int main()
{
int b=9;
cout << d::b << " " << a::b << " " << c::b << endl;
using namespace d;
cout << b << endl;
return 0;
}
结果输出:
9 5 8
9