首页 > 编程 > C++ > 正文

小白的感悟第五弹—C++命名空间的几种玩法

2019-11-08 01:41:09
字体:
来源:转载
供稿:网友

**什么是命名空间?**

命名空间域是随标准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>。

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选