C++命名空间(2)

#include <iostream.h> 
这是传统方式,老版本(如同#include <stdio.h>),没有命名空间,cout就在全局只作用域里可以被调用.

#include <iostream>

新东东,这种方式就要和命名空间连用了,否则他不知道cout等等是哪里的!

---------------------------------------------------------------------------------

using namespace std 这句的意思是 使用命名空间 std 
比如 杭州有一个西湖 潮州也有个西湖 
如果你只说 西湖 ,可能别人就不知道你是说那里的西湖 
如果你说 杭州的西湖, 别人就知道你是说杭州的西湖 
这里的杭州就好像是使用 using namespace std ; 
如果使用这个 就不用 std::cout std::cin 就可以使用 cout cin 
如果没有就要用 std::cout std::cin .

命名空间你可以把它想象成一个类,类里面还有类,你要用里面的,自然要指明你要用谁,比如你叫“王小二”,在二班,而五班也有个王小二,当你们两个在一块时,别人要找你自然要说清楚找哪个

----------------------------------------------------------------------------------------------

<iostream>是标准化以后的C++,而<iostream.h>是标准化之前的C++。两者都是合法的。

如果用标准化的写法,就得
using namesapce std;但是建议写为
using std::cout;
using std::endl;
因为std里面的名称很多很多,
如果你某天用了
using namespace std;
然后你的代码里面有一个类叫做vector,那么多半会出问题。原则上是代码里面用到了什么,就仅仅using 它一个就好了。不要完全包含std。
当然,你也可以不在文件前面写我说的两种,而在每个用到cout的地方修改为std::cout。但是太麻烦了。


如果用非标准化的写法,是可以不用using的。


但是,拜托,C++早在1987就开始准备标准化,在1998年就通过了标准化,现在是2009底了,已经过去了11年。我们有什么理由停留在非标准化的写法呢???????

----------------------------------------------------------------------------------------------

命名空间存在的目的,是为了解决全局域的名字污染问题(虽然只是部分解决)。在一个大型项目中,很容易出现大量全局名称,很容易造成名称冲突,初期只能采取加长名称的长度来解决,但是大量的长名称维护起来同样很痛苦,因此,通过命名空间把全局名称都放在不同的作用域中,能有效减少名称冲突的发生,但命名空间并没有完全解决名字污染问题,因为命名空间本身的空间名称也是一个全局名字,同样存在污染问题。

using namespace是为了兼容旧代码而用的,命名空间成为标准的一部分后,旧代码在使用命名空间的环境中想通过编译就得加上命名空间,但一个一个名字地加上命名空间太繁琐了,所以才产生了using指示符,一次把旧代码所有的名称都包含在内。

除了using指示符外,还可以使用using声明,例如using std::cout,using声明只在需要的地方引入一个声明,而不象using指示符那样去除整个空间的边界,因此是更好更安全的方法,应该尽量使用局部using声明,避免使用using指示符。

-------------------------------------------------------------------------------------------

其实这个还是很有用的,尤其是在团队合作开发的时候,比如说,你把模块分给大家去做,a写了个类w,b也写了个类w,但是由于之前没有沟通好,最后他们的类名都一样,整合在一起的时候,调用的时候就回出现冲突。如果用名称空间,就好办了,调用的时候,只要说是调用a的类w还是b的类w就解决问题了。
如:namespace a{ class w{...};} 
  namespace b{ class w{...};}
用的时候:
  a::w aa//生成a写的w的对象
  aa.get().....
  b::w bb//生成b写的w的对象
  bb.get()....
这样就区分是谁的类了。

-----------------------------------------------------------------------------------------

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值