【发布时间】:2011-02-27 22:07:21
【问题描述】:
iostream 和 iostream.h 有什么区别?
【问题讨论】:
标签: c++ iostream header-files
iostream 和 iostream.h 有什么区别?
【问题讨论】:
标签: c++ iostream header-files
对于初学者来说,这将是一个更简单的答案!
文件 'iostream' 是一个标准 C++ 头文件,其中包含输入和输出流和函数的声明,并提供包装器 cin 和 cout 供其使用。因此,该头文件中提供了所有基本 I/O 函数包装器,并且该头文件还将包含缓冲区声明和其他方法的其他头文件组合成一个头文件。此标头已升级为提供类型安全功能和异常处理。文件 'iostream.h' 是 1996 年之前的上述头文件的弃用版本,当时 C++ 尚未标准化。它在现代编译器中不再可用,只能在 Turbo C 中找到。'using namespace std;'是一个指令,用于指定编译器在使用标准函数时使用 std 命名空间。当 C++ 标准化时,引入了命名空间以避免名称冲突并防止歧义。现在,为了将标准头文件函数与其他函数区分开来,所有这些函数都被限定在标准命名空间中,并且 .h 从头文件名称中删除,作为头文件标准化的标志。现在,要使用这些函数,必须使用 std:: 包含标题和范围名称。但是由于这可能会变得乏味,因此引入 using 指令来简单地排除 std:: 每次使用标准函数时的类型。
问候,
【讨论】:
首次创建 C++ 时,标准运行时库中的所有文件都以 .h 结尾。生活是一致的,而且很好。 cout 和 cin 的原始版本位于 iostream.h 中。当语言被 ANSI 委员会标准化时,他们决定将运行时库中的所有函数移到 std 命名空间中(这通常是一个好主意)。然而,这带来了一个问题:如果他们将所有函数都移到 std 命名空间中,那么旧程序将不再工作!
为了试图解决这个问题,同时保持对旧程序的向后兼容性,引入了一组新的头文件,它们使用相同的名称但缺少 .h 扩展名。这些新的头文件在 std 命名空间中具有所有功能。这样,包含
#include <iostream.h>的旧程序就不需要重写,而新的程序可以#include <iostream>。当您包含标准库中的头文件时,请确保使用非 .h 版本(如果存在)。否则,您将使用不再支持的已弃用版本的标头。
此外,许多从 C 继承的在 C++ 中仍然有用的库都被赋予了 c 前缀(例如,stdlib.h 变成了 cstdlib)。这些库中的功能也被移到 std 命名空间中,以帮助避免命名冲突。
但是,当你编写自己的头文件时,你应该给它们都一个 .h 扩展名,因为你不会把你的代码放在 std 命名空间中。
规则:使用非 .h 版本的库(如果存在),并通过 std 命名空间访问功能。如果非 .h 版本不存在,或者您正在创建自己的标头,请使用 .h 版本
【讨论】:
iostream.h 已被提供它的编译器弃用,iostream 是 C++ 标准的一部分。
为了明确说明,当前 C++ 标准 (INCITS ISO IEC 14882 2003) 中根本没有提到 iostream.h。
编辑:正如@Jerry 提到的,不仅当前的标准没有提到它,而且 C++ 的标准也没有提到它。
【讨论】:
iostream 是标准标头。 iostream.h 是一个非标准头文件,在准标准 C++ 中非常常见,并且是 iostream 的演变而来。 iostream.h 仍然很常见,大概是为了与旧程序一起使用。
如果您的实现有 iostream.h 的工作副本,它可能与 iostream 相同,只是 iostream 中的所有内容都在 std 命名空间中,而 iostream.h 通常位于命名空间之前,并且不使用它们。
如果您的实现同时具有 iostream 和 iostream.h,则 iostream 的工作方式可能如下:
namespace std
{
#include <iostream.h>
}
虽然不一定是这样写的。
【讨论】:
using 声明。在其他情况下,它是一个旧的实现(在少数情况下,介于两者之间......)