【问题标题】:Difference between iostream and iostream.hiostream 和 iostream.h 之间的区别
【发布时间】:2011-02-27 22:07:21
【问题描述】:

iostreamiostream.h 有什么区别?

【问题讨论】:

    标签: c++ iostream header-files


    【解决方案1】:

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

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

    问候,

    TechTIQ Solutions

    【讨论】:

      【解决方案2】:

      首次创建 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 版本

      来源:https://www.learncpp.com/cpp-tutorial/19-header-files/

      【讨论】:

        【解决方案3】:

        iostream.h 已被提供它的编译器弃用,iostream 是 C++ 标准的一部分。

        为了明确说明,当前 C++ 标准 (INCITS ISO IEC 14882 2003) 中根本没有提到 iostream.h

        编辑:正如@Jerry 提到的,不仅当前的标准没有提到它,而且 C++ 的标准也没有提到它。

        【讨论】:

        • 你应该提到 std 命名空间。
        • @Jerry: 保留措辞但澄清了含义
        • iostream.h 包含的原始含义是它保留了与命名空间在 C++ 中广泛使用之前编写的代码的向后兼容性。
        • 这个答案是 iostream.h 和 iostream 之间的区别吗?我不这么认为。
        【解决方案4】:

        iostream 是标准标头。 iostream.h 是一个非标准头文件,在准标准 C++ 中非常常见,并且是 iostream 的演变而来。 iostream.h 仍然很常见,大概是为了与旧程序一起使用。

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

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

        namespace std
        {
        #include <iostream.h>
        }
        

        虽然不一定是这样写的。

        【讨论】:

        • 实际上,通常有很多的区别——iostream.h 中的流通常不像iostream 中那样是模板。如果你做的不仅仅是简单的阅读和写作(例如,编写任何操纵器),那么差异通常是巨大的。
        • @Jerry:你是对的,但不幸的是,你带回了我必须转换的系统的记忆,该系统在流上完成了一些记录不充分的魔法。但是,这并不一定意味着 iostream.h 和 iostream 在现代实现中存在显着差异。如果我记得的话,我会在回家后查看我的 gcc 实现。
        • 是的,这就是为什么我在其他地方评论说 iostream 和 iostream.h 之间的差异差异很大。在某些情况下,iostream.h 是当前的实现,所有内容都带有using 声明。在其他情况下,它是一个旧的实现(在少数情况下,介于两者之间......)
        猜你喜欢
        • 2015-01-14
        • 1970-01-01
        • 2010-09-17
        • 1970-01-01
        • 2018-12-29
        • 1970-01-01
        • 2021-12-25
        • 2020-05-10
        • 2014-09-20
        相关资源
        最近更新 更多