这两者都有什么不同呢?首先,5年前我们就开始反对把.h符号继续用在标准的头文件中。继续使用过时的规则可不是个好的方法。从功能性的角度来讲,<iostream>包含了一系列模板化的I/O类,相反地<iostream.h>只仅仅是支持字符流。另外,输入输出流的C++标准规范接口在一些微妙的细节上都已改进,因此,<iostream>和<iostream.h>在接口和执行上都是不同的。最后,<iostream>的各组成都是以STL(Standard Template Library,标准模板库)的形式声明的,然而<iostream.h>的各组成都是声明成全局型的。
因为这些实质上的不同,你不能在一个程序中混淆使用这两个库。做为一种习惯,在新的代码中一般使用<iostream>,但如果你处理的是过去编写的代码,为了继承可以用继续用<iostream.h>就保持代码的一致性。
/////////////////////////////
<iostream>表示你使用的是标注命名空间,也就是在程序开始应该有这么一句话
using namespace std ; 这是遵循c++标准的
<iostream.h> 则没有遵循c++标准
/////////////////////////////
<string.h>是旧的C头文件,对应的是基于char*的字符串处理函数;
<string>是包装了std的C++头文件,对应的是新的strng类;
<cstring>是对应旧的C头文件的std版本。
#include <iostream.h> 和 #include <iostream>
前一个不是c++标准中的,后一个在c++标准中
还有就是平时我们所用的两种情况,当有输出和输入流时就要注意了。
换成#include <iostream>,要加一句using namespace std;或把cout改成std::cout,end改成std::endl等等
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
这个问题牵扯到命名空间,以下简单介绍命名空间的优点:
// one.h char func(char); class String { ... };
// somelib.h class String { ... };
如果按照上述方式定义,那么这两个头文件不可能包含在同一个程序中,因为String类会发生冲突。所谓命名空间,是一种将程序库名称封装起来的方法,它就像在各个程序库中立起一道道围墙。比如: // one.h namespace one { char func(char); class String { ... }; }
// somelib.h namespace SomeLib { class String { ... }; }
std是C++标准库定义的标准命名空间,可以先记住这两种方式,时间长了就明白了
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
对于这个问题,某个马嘉楠老师如是说:
其实没有< iostream.h > 这样的东西 --- 标准化委员会在简化非C标准头文件时用< iostream > 取代了它。但又没有完全取消 < iostream.h > 的使用,并且很多编译器都同时支持< iostream > 和< iostream.h > ,造成现在的局面,老大(标准化委员会)确实有不得已的苦衷。
- <string.h> 是旧的C头文件,对应的是基于char*的字符串处理函数;
- <string> 是包装了std的C++头文件,对应的是新的strng类;
- <cstring> 是对应旧的C头文件的std版本。