namespace那些事儿

发布时间:2016-12-9 16:08:00 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"namespace那些事儿",主要涉及到namespace那些事儿方面的内容,对于namespace那些事儿感兴趣的同学可以参考一下。

       如同名字一样的意思,NameSpace:命名空间,之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象,对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数(不可避免),使用起来就有问题了,为了解决这个问题,引入了名字空间这个概念,通过使用using namespace xxx;你所使用的库函数或变量就是在该名字空间中定义的.这样以来就不会引起不必要的冲突了.      所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。      一 :<iostream>和<iostream.h>格式不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。 因此,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。 namespace是为了解决C++中的名字冲突而引入的。  什么是名字冲突呢?比如,在文件x.h中有个类MyClass,  在文件y.h中也有个类MyClass,而在文件z.cpp中要同时  引用x.h和y.h文件。显然,按通常的方法是行不能的,  那怎么办呢?引入namespace即可。例如:         在x.h中的内容为  // x.h  namespace MyNamespace1  {     class MyClass     {     public:         void f();     private:         int m;     }  };         在y.h中的内容为  // y.h  namespace MyNamespace2  {     class MyClass     {     public:         void f();     private:         int m;     }  };     然后在z.cpp中引入x.h和y.h  // z.cpp  #include "x.h"     #include "y.h"     void z::f()  {     //声明一个文件x.h中类MyClass的实例x     MyNamespace1::MyClass x;       //声明一个文件x.h中类MyClass的实例x     MyNamespace2::MyClass y;     //调用文件x.h中的函数f     x.f();     //调用文件y.h中的函数f     y.f();  }         名字空间实质上是一个作用域。 

上一篇:使用HttpOnly提升Cookie安全性
下一篇:struct tm 和 time_t 时间和日期的使用方法(转)

相关文章

相关评论