C++ iostream和iostream.h之间的差异

C++ iostream和iostream.h之间的差异,c++,iostream,header-files,C++,Iostream,Header Files,iostream和iostream.h之间有什么区别 iOxSurviv.H./C>不允许提供它的编译器, iSooS是C++标准的一部分。 明确说明,在当前的C++标准中,没有提到 IoStur.H./Cube >(ICOSIS ISOEC 14882 2003)。 < >编辑:正如JeRy提到的,当前标准不仅没有提到它,而且没有C++标准提到它。 IoSo流传是一个标准的头。IoSturn.h是一个非标准的头,在标准的C++中非常常见,是IoStand演变而来的。iostream.h仍然很常

iostream
iostream.h
之间有什么区别 iOxSurviv.H./C>不允许提供它的编译器,<代码> iSooS是C++标准的一部分。

明确说明,在当前的C++标准中,没有提到<代码> IoStur.H./Cube >(ICOSIS ISOEC 14882 2003)。


< >编辑:正如JeRy提到的,当前标准不仅没有提到它,而且没有C++标准提到它。

IoSo流传是一个标准的头。IoSturn.h是一个非标准的头,在标准的C++中非常常见,是IoStand演变而来的。iostream.h仍然很常见,可能是用于较旧的程序

如果您的实现具有iostream.h的工作副本,那么它可能与iostream相同,只是iostream中的所有内容都位于
std
命名空间中,而iostream.h通常位于命名空间之前,并且没有使用它们

如果您的实现同时具有iostream和iostream.h,那么iostream的工作方式可能如下:

namespace std
{
#include <iostream.h>
}
名称空间std
{
#包括
}
虽然它不一定是这样写的

当C++首次创建时,标准运行库中的所有文件都以.h结尾。生活是始终如一的,而且是美好的。cout和cin的原始版本存在于iostream.h中。当该语言被ANSI委员会标准化后,他们决定将运行库中的所有函数移到std名称空间中(这通常是个好主意)。然而,这带来了一个问题:如果他们将所有函数移到std名称空间中,那么所有旧程序都将无法工作

为了解决这个问题,在保持旧程序向后兼容的同时,引入了一组新的头文件,它们使用相同的名称,但缺少.h扩展名。这些新头文件的所有功能都位于std名称空间中。这样,包含
#include
的旧程序就不需要重写,而新程序可以
#include

包含标准库中的头文件时,请确保使用非.h版本(如果存在)。否则,您将使用不再支持的已弃用版本的标头

此外,从C继承的许多库在C++中仍然有用,给出了C前缀(例如,STDLIB。h成为CSTDLIB)。这些库中的功能也被移动到std名称空间中,以帮助避免命名冲突

但是,当您编写自己的头文件时,您应该为它们提供一个.h扩展名,因为您不会将代码放在std名称空间中

规则:使用库的非.h版本(如果存在),并通过std命名空间访问该功能。如果非.h版本不存在,或者您正在创建自己的标题,请使用.h版本


来源:

对于初学者来说,这将是一个更简单的答案

文件“IoSt流”是一个标准的C++头,包含输入和输出流和函数的声明,并提供包装CIN和CUT供其使用。因此,所有基本I/O函数包装器都在该头中提供,并且该头还将包含缓冲区声明和其他方法的其他头组合到一个头中。此标头已升级,以提供类型安全功能和异常处理。文件“IoSurth.h”是在1996之前的上面标题的一个弃权版本,当时C++还没有标准化。它在现代编译器中不再可用,只能在inTurbo C中找到。“使用名称空间std;”是一个指令,用于指定编译器在使用标准函数时使用std命名空间。当C++被标准化时,引入命名空间以避免名称冲突并防止歧义。现在,为了将标准头函数与其他函数区分开来,所有这些函数都被限定在标准名称空间中,并且.h从头名称中删除,作为头的标准化标记。现在,要使用这些函数,必须使用std::,包含头和作用域名称。但由于这可能会变得单调乏味,因此引入using指令只是为了在每次使用标准函数时排除std::的类型

问候,


你应该提到STD命名空间。@杰瑞:保持了措辞,但澄清了含义。IoSoSur.h的原意包括:它与在C++中广泛使用的命名空间之前的代码保持向后兼容性。这是IoSurviv.h和IoSt流之间的区别吗?我不这么认为。事实上,通常有比这更多的区别——iostream.h中的流通常不像iostream中的流那样是模板。如果你所做的远远超出了简单的读写(例如,编写任何操纵器),那么区别往往是巨大的。@Jerry:你是对的,但不幸的是,你带回了一个我必须转换的系统的记忆,该系统在数据流上做了一些记录不良的魔法。然而,这并不一定意味着在现代实现中iostream.h和iostream之间存在显著差异。如果我还记得的话,我回家后会看看我的gcc实现。是的,这就是为什么我在别处评论说iostream和iostream.h之间的差异很大。在某些情况下,iostream.h是一个当前的实现,
对所有内容使用
声明。在其他情况下,它是一个旧的实现(在少数情况下,介于两者之间……)