4

可能重复:
您在 C++ 代码中使用了哪个 I/O 库?

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

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

拜托,不要语言抨击。

4

5 回答 5

11

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

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

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

C++ I/O, while it looks fairly simple at first, has a lot of programmer-accessible structure, and therefore a good C++ programmer can modify it to cover cases that C I/O can't. (Don't overuse this.)

于 2010-11-16T19:22:19.230 回答
4

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

于 2010-11-16T19:14:11.470 回答
2
  1. 您获得可以以任何方式实现的抽象输入/输出/可搜索流。

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

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

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

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

更多的?

于 2010-11-16T19:21:25.063 回答
1

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

于 2010-11-16T19:12:54.950 回答
0

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

于 2010-11-16T19:13:50.363 回答