【问题标题】:What does C++ iostreams have to offer in comparison with the C stdio library? [duplicate]与 C stdio 库相比,C++ iostreams 必须提供什么? [复制]
【发布时间】:2010-11-16 19:08:22
【问题描述】:

可能重复:
Which I/O library do you use in your C++ code?

我在对另一个问题的评论中提出了这个问题,并被要求将其改为一个适当的问题。

为什么我要使用 iostream 而不是 stdio?更具体地说,与 C 等价物相比,std::getline 必须提供什么?

拜托,不要语言抨击。

【问题讨论】:

标签: c++ iostream stdio


【解决方案1】:

有几个优点,主要是 <<>> 运算符。获取一条线并没有什么不同,尽管能够将其读入std::string 是一个相当大的优势。

C++ I/O 具有类型安全性。您不会将参数列表写为带引号的字符串,然后再写为变量等。您编写一次要打印的内容,C++ 会计算出有多少个参数以及它们是什么类型。当您有类型不匹配时,C I/O 可能会导致 I/O 错误,甚至尝试访问受保护的内存。

C++ I/O 易于扩展。一旦您有要复制的样本,您就可以轻松地编写operator<<()operator>>()printf()和好友不能扩展。您有一个固定的格式类型列表。

C++ I/O,虽然起初看起来相当简单,但有很多程序员可访问的结构,因此优秀的 C++ 程序员可以对其进行修改以涵盖 C I/O 无法解决的情况。 (不要过度使用它。)

【讨论】:

    【解决方案2】:

    最大的收获是类型安全。 C 中的格式字符串没有类型(不像 OCaml 或 boost::format),因此您可能会不小心用它们做一些非常讨厌的事情。

    【讨论】:

      【解决方案3】:
      1. 您获得可以以任何方式实现的抽象输入/输出/可搜索流。

        您从可能是文件、内存、字符串甚至自定义过滤器或 zlib 压缩器的流中写入/读取!

        一些 C 库提供了设置读/写处理程序的选项(BSD 和 Linux),但仍然没有 与 std::streambuf 相同的功能,这些不是标准的。

      2. 您可以使用特定于流的语言环境,允许您根据任何语言环境格式化数据以进行流式传输 线程特定的方式。

      3. 类型安全。
      4. 写入和读取流通用对象(复杂变量、XML 对象等)

      更多?

      【讨论】:

        【解决方案4】:

        首先,如果您使用 iostream,那么您可以使用 std::string,而不是使用 char 数组,这意味着您不必担心内存管理。

        【讨论】:

        • 您已经可以在 printf 中使用 .c_str() 和 std::string。 std::string 很好,但它独立于 iostreams。
        • @Chris:字符串 input 什么都没有?
        • @Chris 我特别想到了std::getline()。它将行读入std::string,而不是fgets(),后者将行读入字符数组。对于 char 数组,您必须正确分配它、跟踪它的大小并取消分配它。
        【解决方案5】:

        好吧,如果您使用 C++,您可能想要使用 OOP,对吗?我猜 cstdio(又名 stdio.h)只是为了与 C 兼容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-08-13
          • 2018-08-06
          • 1970-01-01
          • 1970-01-01
          • 2016-07-03
          • 2010-11-05
          • 2013-06-26
          相关资源
          最近更新 更多