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(); 
       名字空间实质上是一个作用域。 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值