名空间的重认识

来源:互联网 发布:ubuntu如何卸载vmware 编辑:程序博客网 时间:2024/05/26 05:53

前些日子学习C++的时候,看到了第一个“Hello world!"的小程序。

然后对在包含头文件下面的using namespace std;感到困惑,但又没有去详细了解名空间的作用,也没有去深入探讨到底有多少个不同的名空间,于是也有样学样的在自己写的代码里面加上using namespace std; 。今天晚上翻南郁老师的白话C++,看到第三章的时候,就顺手google了一个名空间的使用,都贴到这里来吧。免得以后需要但又忘记的时候又要google了。

 

C++提供了名空间技术来解决大型软件开发 中容易出现的类,变量或函数同名问题.(这里的同名可能是跟标准库或者第三方库或本项目各模块同名使得无法编译之类的情况发生)
如何使用名空间,你可以使用namespace定义一个名空间,然后在该空间里面定义C++的类,变量和函数,形如下形式:
namespace 名空间名{
//TODO:
}
下面的程序就用上面的形式声明了NS1和NS2名空间并在其中定义了同名的两个变量a,问题的时候只要形如这样的代码”名空间名::变量名”(访问类和函数也如此)就可以了.
#include <stdio.h>
namespace NS1{
       int a=1;
}
namespace NS2{
       int a=2;
}
int main(void){
       printf("NS1::a %d/n", NS1::a);
       printf("NS2::a %d/n", NS2::a);
       return 0;
}
运行结果:
NS1::a 1
NS2::a 2
当然如果你在名空间内部定义大量的C++类,变量和函数的话,我们不可能每次都在前面加”名空间名::”,C++里面有using指令来表示后面代码中的类,变量和函数来默认添加前缀名空间名,形如这样的代码:
using namespace 名空间名;
using 名空间名::类名;
using 名空间名::变量名;
using 名空间名::函数名;
下面的程序展示了使用using指令的例子
#include <stdio.h>
namespace NS3{
       int i=1;
       int j=2;
}
int main(void){
       using namespace NS3;
       i=j+10;
       j=20;
       printf("NS3::i %d/n", i);
       printf("NS3::j %d/n", j);
       return 0;
}
运行结果:
NS3::i 12
NS3::j 20
注意:如果多次使用using namespace名空间应确保,这几个名空间里面没有同名冲突,否则将导致无法编译.
C++标准库的所有标识符都定义在std名空间里面。

 

 

 

原创粉丝点击