与C stdio库相比,C ++ iostream提供了什么?

时间:2010-11-16 19:08:22

标签: c++ iostream stdio

  

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

我在对另一个问题的评论中提出了这个问题,我被要求将其作为一个正确的问题。

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

请不要抨击语言。

5 个答案:

答案 0 :(得分:11)

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

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

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

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

答案 1 :(得分:4)

最大的收获是类型安全。 C语言中的格式字符串没有类型(与OCaml或boost :: format不同),所以你可以偶然地用它们做一些非常讨厌的事情。

答案 2 :(得分:2)

  1. 您可以获得可以任何方式实现的抽象输入/输出/可搜索流。

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

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

  2. 您可以使用特定于流的区域设置,允许您根据要传输的任何区域设置格式化数据 线程特定的方式。

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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