命名空间域是随标准C++而引入的。它相当于一个更加灵活的文件域(全局域),可以用花括号把文件的一部分括起来,并以关键字namespace开头给它起一个名字:
namespace name1{ int a = 0; }说到这里,相信你一定会想到std这个命名空间。
没错,标准C++库中的所有组件都是在一个被称为std的名字空间中声明和定义的。
**命名空间的几种玩法...**
NO.1 两种访问方式
要在采用标准C++的平台上使用标准C++库中的组件,有两种方式:
1.写一个using指示符:using namespace std; 直接使用标准C++库中的所有成员。
2.用std::成员 的方式使用C++库里的成员。(::是作用域解析符)
![]()
在这里,我们只需要了解有这两种方式即可。为了程序的简洁性和可读性,编写程序时普遍采用第一种方式。当然,在同一段程序中,这两种方式可以同时使用。
NO.2 解决变量命名冲突的问题
我们来看这样一个例子:
#include<iostream>using namespace std;namespace name1{ int value = 1;//name1域内对象}namespace name2{ int value = 2;//name2域内对象}int value = 3;//全局变量int main(){ int value = 4;//局部变量 cout << name1::value << endl; cout << name2::value << endl; cout << value << endl; getchar(); return 0;}在这段程序中,有两个域的域内变量和全局、局部变量。程序执行结果为:
由上图可以看出:
1.加上域作用限定符可以访问不同域中的成员变量,且变量名可以相同。
2.重名的全局和局部变量,编译器优先访问局部变量,为了印证这一点,在屏蔽掉局部变量后,程序执行结果如下:
另外,如果不想用::限定符来访问自己定义的命名空间,也可以在main函数前使用“using namespace +命名空间名”的方式来访问。
NO.3 命名空间的嵌套定义
除了单独使用外,命名空间还可以进行嵌套定义,例如:
#include<iostream>using namespace std;namespace name1{ namespace name2 { int value = 1; } int value = 2; }int main(){ cout << name1::value << endl; cout << name1::name2::value << endl; getchar(); return 0;}程序执行结果大家已经猜到了,没错,就是2和1。** 一点题外话。。。**
这个程序:
#include<iostream.h>using namespace std;int main(){ cout << "Hello World" << endl; getchar(); return 0}不会编译通过,是因为#include<iostream.h>是C++比较老的库, 而vc6.0仍然支持这个头文件 ,但新的编译器(如vs2008及以上)都不再支持,所以建议使用新库的头文件#include<iostream>。
新闻热点
疑难解答
图片精选