iostream和iostream.h的区别

转自: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++标准程序库》。

时间: 2024-10-23 23:18:14

iostream和iostream.h的区别的相关文章

iostream与iostream.h的区别详细解析_C 语言

C++的标准类库被修订了两次,有两个标准 C92和C99,这两个库现在都在并行使用,用 .h 包含的是c92 ,不带 .h 的是c99的头文件,对于普通用户来说这两者没有什么区别,区别是在内部函数的具体实现上.旧的C++头文件是官方明确反对使用的,但旧的C头文件则没有(以保持对C的兼容性).据说从 Visual C++ .NET 2003 开始,移除了旧的 iostream 库.其实编译器制造商不会停止对客户现有软件提供支持,所以在可以预计的将来,旧的C++头文件还会嚣张一段时间.如果能明白字符

使用iostream和iostream.h中遇到的编程问题

问题描述 使用iostream和iostream.h中遇到的编程问题 运行下面两个程序为什么它的运行结果会不同,求大神解决 #include #include #include #include void gotoxy(int x, int y)//定位光标 { COORD pos; pos.X = x * 2; pos.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); } int main(void)

c++ string与string.h的区别

c++ string与string.h的区别 在C++中,#include<iostream>与#include<iostream.h>的区别,前者要使用更新的编译器(其实大部分编译器多比较前卫了,出了有些搞嵌入式的用变态的编译器).<string>是c++ 的头文件,其内包含了一个string类,string s1就是建立一个string类的对象 <string.h> 的c语言的东西 并无类,所以不能 string s1 <cstring>文件

LIB和DLL的区别与使用

共有两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library. 一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library. 共有两种链接方式: 动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅包含在运行时定位DLL函数的可执行代码所需的信息. 静态链接使用静态链接库,链接器从静态链接库LIB获取所有

深入剖析gcc和g++的区别

深入剖析gcc和g++的区别       gcc和g++都是GNU(组织)的一个编译器. 误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以,但是请注意:1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序:后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的.C++的语法规则更加严谨一些.2.编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g+

【C/C++学院】0822-类型转换函数与构造转换函数/类的继承/类的继承以及区别/继承静态成员与静态函数//继承实现代码重用/单继承QT案例/多继承简介以及实战/Gpu编程

类型转换函数与构造转换函数 #include<iostream> class fushu { public: explicit fushu(int num)//避免隐式转换,引发歧义 { x = num; y = num; } void print() { std::cout << x << "+" << y << "i" << std::endl; } operator int(); //不支

c++中引用和指针的区别和联系_C 语言

C++中的引用和指针 ★ 相同点: 1. 都是地址的概念:指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名(java中的引用其实也是别名的意思). ★ 区别: 1. 指针是一个实体,而引用仅是个别名:2. 引用使用时无需解引用(*),指针需要解引用:3. 引用只能在定义时被初始化一次,之后不可变:指针可变: 引用"从一而终" 4. 引用没有 const,指针有 const,const 的指针不可变:5. 引用不能为空,指针可以为空:6. "sizeof 引用&

详解C++中的const关键字及与C语言中const的区别_C 语言

const对象默认为文件的局部变量,与其他变量不同,除非特别说明,在全局作用域的const变量时定义该对象的文件局部变量.此变量只存在于那个文件中中,不能别其他文件访问.要是const变量能在其他文件中访问,必须显示的指定extern(c中也是)   当你只在定义该const常量的文件中使用该常量时,c++不给你的const常量分配空间--这也是c++的一种优化措施,没有必要浪费内存空间来存储一个常量,此时const int c = 0:相当于#define c 0:    当在当前文件之外使用

Windows下使用Dev-C++开发基于pthread.h的多线程程序

一.下载Windows版本的pthread     目前最新版本是:pthreads-w32-2-9-1-release.zip.   二.解压pthread到指定目录      我选择的目录是:E:\DEV-CPP\Pthread      完成后,该目录会多出三个文件夹:Pre-built.2,pthreads.2,QueueUserAPCEx.   三.配置Dev-C++编译选项        1)点击"工具"→"编译选项"→"目录"→&q