简单地说,名字空间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标准空间就行了。