iostream.h和iostream 区别

转自:http://hi.baidu.com/laddie10/blog/item/079b1d4c32d7d8fcd62afc25.html

C++中新定义的方法都是有名字空间的 比如cout就属于std名字空间 如果include头文件的时候加上.h,默认会using namespace 否则需要自己加上 using namespace XXX 对于C中已经定义的方法如printf,没有影响的

iostream.h是包含输入/输出流处理的头文件,iostream就什么都不是了
但用iostream要加名词空间namespace

#include<iostream.h>
或者是
#include<iostream>
using namespace std;
二者都行

#include<iostream.h>是C语言中比较通用的
#include<iostream>
using namespace std;
是C++中比较通用的

#include <iostream.h>这样写,里面的函数都是全局函数.

不加.h的是现在C++中规定的标准,目的在于使C++代码用于移植和混合嵌入时不受扩展名.h的限制,避免因为.h而造成的额外的处理和修改
而加.h的是c语言的用法,但是在c++中也支持这种用法,主要是为了向下兼容c 的内容,我们平时尽量不用这种方法
iostream是现在C++中规定的标准,目的在于使C++代码用于移植和混合嵌入时不受扩展名.h的限制,避免因为.h而造成的额外的处理和修改。iostream包含的基本功能和对应的旧头文件相同,但头文件的内容在名字空间std中。(在标准化的过程中,库中有些部分的细节被修改了,所以旧头文件和新头文件中的实体不一定完全对应。) 一般情况下应该用这个头文件,而iostream.h则是老式的,以后有可能被淘汰。
     

      经常在CSDN以及其他之类的技术论坛上问关于C++ 头文件的问题。提出这些问题的往往就是那些刚学C++的新手。当初我是菜鸟的时候也问过类似的问题。

     现在来看看下面两个include:

     #include<iostream>      // 这个就是1998年标准化以后的标准头文件

     #include<iostream.h>        // 这个就是标准化以前的头文件

     更本质上的区别就是iostream把标准C++库的组件放在一个名位std的namespace里面。而相对的iostream.h则将这些标准组件放在全局空间里,同时在标准化以后旧有的C标准库也已经经过改造了。 使用前者,就需要在代码中添加语句:using namespace std;

     看看下面这两个头文件

     // 标准化后经过改造的C的标准库,所有的组件都放在了std中

     #include<cstdio>           

     // 标准化以前C++中的C标准库

     #include<stdio.h>

     // 在看看这个头文件C标准库下 基于char* 的字符处理函数库

     #include<string.h>

     // 在标准化以后他变成了这样

     #include<cstring>

     // 但是很多朋友还看见过这个字符串处理函数库,他包含了新的string class

     #include<string>

     经过了标准委员会如此大规模手术后,在98年以前出品的C++编译器(BC3.0,BC5.0)上能顺利通过编译的源文件,在支持新标准的编译器上可能无法顺利通过编译也就是很正常的事了。

[起因]

     在回过头来看看标准程序库,这个程序库涵盖范围相当广大,提过了许许多多好用的功能。正是因为这样标准程序库中class的名称和函数名与第三方提供的程序库中的class名或是函数名发生名字冲突的可能性大大增大。为了避免这个问题的发生,标准委员会决定将标准程序库中每一样东西都放在namespace std中。但是这么做同时有引来了一个新的问题。很多C++程序代码依赖那些已经存在很多年的C++ “准”标准程序库(C++迟迟未标准化才导致这些情况的发生),例如iosteam.h,complex.h等等。

     为了解决这个新出现的问题,标准化委员会决定设计一些新的头文件名,给那些穿上std外衣的组件所使用。把C++头文件的.h去掉,于是就有前面出现的iostream,同样C的头文件也做了相同的处理,同时在前面加上了一个字母c,以表示是C的头文件(感觉上有中种族歧视的感觉)。同时标准化委员会声明就有的C++头文件将不再列于被支持的名单之中了,而旧有的C头文件为了满足“对C的兼容性”这个古老契约,仍然将继续存活下去。

但是,那些编译器厂商不可能去推翻他们客户的旧有编译器(也跟本不会去这么做),所以那些旧有的C++头文件仍然苟延残喘的活了下来,并不断的扰乱那些C++新兵的心智。

     下面就是现在大多数C++开发工具表示头文件的组织状态:

1.     旧的C++头文件 比如iostream.h,他们虽然被标准化委员会所抛弃,但由于各大厂商为了各自的商业利益仍然将继续存活下去,这些头文件的内容将不处于namespace std中。

2.     新的C++头文件如iostream虽然提供了和旧有头文件相同的功能,但他的内容都并入了namespace std中,从而有效避免了名字污染的问题。

3.     标准C的头文件如stdio.h继续获得支持,这类文件的内容并未放在std中。

4.     C函数库的技能也有对应的新式C++版本,起名称类似cstdio,这类头文件的内容也有幸穿上了std的外衣。

其实标准化以后的标准程序库的改动并不只有这些而已,很多的标准化组件都被“tamplate化”。其中就有元老级人物iostream。标准程序库的问题并不是用一篇,两篇文章就可以说清楚的。如果你像进一步的了解C++的标准程序库的话,你可以看看侯先生的《C++标准程序库》。

posted on 2008-06-20 19:34 hijackwust 阅读(45646) 评论(11)  编辑  收藏

评论

# re: iostream.h和iostream 区别 2009-12-14 20:43 黑剑

这个好像不对吧。。。
在VS里,
#include <iostream.h>
根本通不过编译  回复  更多评论   

# re: iostream.h和iostream 区别 2009-12-17 10:47 y_bboo

还是不太明白原理...
昨天用#include<iostream.h>还可以编译通过,今天就不行了,郁闷
改成#include<iostream>
use namespace std;
就可以了

但是试一下之前编译通过的iostream.h程序,还是可以编译的,稍微修改下也不可以用了

楼主,这是什么问题呢?  回复  更多评论   

# re: iostream.h和iostream 区别 2010-07-12 17:02 淘宝网女装皇冠店

iostream.h是包含输入/输出流处理的头文件,iostream就什么都不是了   回复  更多评论   

# re: iostream.h和iostream 区别[未登录] 2010-07-15 18:41 FatBear

不会吧 我这儿挺正常的@黑剑
  回复  更多评论   

# re: iostream.h和iostream 区别 2010-12-23 09:37 李果

iostream.h 在c++ 里面报错?!  回复  更多评论   

# re: iostream.h和iostream 区别 2011-03-14 19:40 xiaoluob

可以通过啊
,我刚试的  回复  更多评论   

# re: iostream.h和iostream 区别 2011-04-10 14:02 Phyking

vs2008中用#include<iostream.h>不行。
下面的可以
#include<iostream>
use namespace std;   回复  更多评论   

# re: iostream.h和iostream 区别 2011-10-02 13:44 zengyu

很好啊;四种形式的头文件;看来并不是.h的就是旧式的c的头文件;还有可能是未标准化的c++的头文件;现在应该都用标准化的东西;那么只要不用.h的头文件;那么就是用的标准头文件了  回复  更多评论   

# re: iostream.h和iostream 区别 2012-12-02 17:44 Ronando

楼主只说了表象,没有深究原因啊~~
c++ 严格来说是: c , obejcted-oriented c++, template c++, STL 的语言联邦。
<iostream.h> 属于c 那一部分, 存在于全局的命名空间
<iostream> 属于c++ 之余 std:: 下的那一部分。 为了兼容性, 不得已保留了iostream.h
这就是为什么 #include<iostream.h> 不许要使用 using namespace std; 来声明的原因了  回复  更多评论   

# re: iostream.h和iostream 区别 2014-04-16 13:11 路人江

建议回复说#include<iostream.h>报错的找一下自己的系统中有没有iostream.h这个文件。以我自己为例,虽然安装了VS2010,但编译器include路径下只有“iostream”文件,而没有“iostream.h”。
用txt打开iostream,文件首行内容就是“iostream standard header for Microsoft”,VS直接不带后缀,这也许就是上面所说的“目的在于使C++代码用于移植和混合嵌入时不受扩展名.h的限制,避免因为.h而造成的额外的处理和修改”。  回复  更多评论   

# re: iostream.h和iostream 区别 2014-04-17 10:20 arlk0rs

vs2008 iostream.h不存在。
#include <iostream>
using namespace std;
这俩句必须要,要不编译通不过。
error C2065: “cout”: 未声明的标识符  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2008年6月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

导航

统计

常用链接

留言簿(6)

随笔档案(57)

友情链接

搜索

最新评论

阅读排行榜

评论排行榜