代码之家  ›  专栏  ›  技术社区  ›  onemasse

C++的流与C STDIO库相比需要提供什么?[复制品]

  •  4
  • onemasse  · 技术社区  · 15 年前

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

    我在对另一个问题的评论中问了这个问题,而我被要求把它变成一个合适的问题。

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

    拜托,不要说脏话。

    5 回复  |  直到 15 年前
        1
  •  11
  •   GManNickG    15 年前

    有几个优点,主要是 << >> 运算符。得到一条线并没有那么不同,尽管能够把它读成 std::string 是相当大的优势。

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

    C++ I/O很容易扩展。你可以写 operator<<() operator>>() 很容易,一旦你有一个样本要复制。 printf() 朋友也不能延伸。您有一个固定的格式类型列表。

    C++ I/O,虽然乍看起来相当简单,但是有很多程序员可访问的结构,因此一个好的C++程序员可以修改它来覆盖C/IO不能的情况。(不要过度使用。)

        2
  •  4
  •   Niki Yoshiuchi    15 年前

    最大的收获是类型安全。C中的格式字符串没有类型(与例如ocaml或boost::format不同),因此您可以意外地对它们执行一些非常讨厌的操作。

        3
  •  2
  •   Artyom    15 年前
    1. 您将获得可以以任何方式实现的抽象输入/输出/可查找流。

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

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

    2. 您可以使用流特定的区域设置,使您能够根据要流入的任何区域设置格式化数据。 线程特定方式。

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

    更多?

        4
  •  1
  •   Dima    15 年前

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

        5
  •  0
  •   arifwn    15 年前

    如果你使用C++,你可能想使用OOP,对吧?我猜CSTDIO(又称stdio.h)只是为了与C兼容。