简单地说,名字空间namespace,是指标识符的各种可见范围。在写大程序时,不同程序员在使用标识符时,可能出现名字重叠冲突现象,为此C++中引入名字空间概念,将相同的名字放入不同的名字空间中,就可以避免相同的名字的冲突。
举一个例子,我们两个班在上课,在每班各有一个学生叫李刚。为了防止名字冲突,在叫李刚时前面加上班级,这个班级就是名字空间。
由于C++标准程序库中的所有标识符都被定义于一个名为std的namespace中,所以我们在程序前面要加上使用它的语句:using namespace std;
一 名字空间有三种使用方法(参照课本P12)
1. using namespace std---这种方法,在后面没有特别声明均表示名字来自空间std;
2.使用“::”域运算符。
空间名::名字,如std::cout<<"hello!"--表明此处使用的标识符cout来自名字空间std;
3.使用using和域运算符
如using std::cout<<"Hello!";
二 名字空间还可以自己定义
定义关健词:namesapce
语法:namesapce 空间名
例如:
#include<iostream>
using namespace std; //使用标准命名空间
namespace namespace1 //自己定义第一个命名空间
{
int a=100;
}
namespace namespace2 //自己定义第二一个命名空间
{
int a=200;
}
void main()
{ int a=300;
cout<<"nameapce1:a="<<namespace1::a<<endl;
cout<<"nameapce2:a="<<namespace2::a<<endl;
cout<<“main:a="<<a<<endl;
}
上例中,变量a定义过两次,重叠使用了,但不会出错,分别输出各自的值。如果不是在不同的名字空间里,编译是通过不了的。
三.还可以嵌套定义名安空间
例:
namespace HelloWorld
{
namespace Hello
{
void foo()
{ cout<<"Hello"; }
}
void fooo()
{ Hello::foo();
cout<<" World!"<<endl; }
}
void main()
{
HelloWorld::fooo();
}
注:初学者,可以不用自己定义名字空间,只要明白名字空间含义及为什么使用std标准空间就行了。