可能重复:
您在 C++ 代码中使用了哪个 I/O 库?
我在对另一个问题的评论中问了这个问题,并要求我将其作为一个适当的问题。
为什么我要使用 iostream 而不是 stdio?更具体地说,std::getline 必须提供什么而不是 C 等价物?
拜托,不要语言抨击。
可能重复:
您在 C++ 代码中使用了哪个 I/O 库?
我在对另一个问题的评论中问了这个问题,并要求我将其作为一个适当的问题。
为什么我要使用 iostream 而不是 stdio?更具体地说,std::getline 必须提供什么而不是 C 等价物?
拜托,不要语言抨击。
有几个优点,主要是<<
和>>
运算符。得到一条线并没有什么不同,尽管能够将它读成 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.)
最大的收获是类型安全。C 中的格式字符串没有类型(不像 OCaml 或 boost::format),因此您可能会不小心用它们做一些非常讨厌的事情。
您获得可以以任何方式实现的抽象输入/输出/可搜索流。
您可以从可能是文件、内存、字符串甚至自定义过滤器或 zlib 压缩器的流中写入/读取!
一些 C 库提供了设置读/写处理程序(BSD 和 Linux)的选项,但仍然没有与 std::streambuf 相同的功能,并且这些不是标准的。
您可以使用特定于流的语言环境,允许您根据任何语言环境格式化数据,以便以特定于线程的方式进行流式传输。
更多的?
一方面,如果您使用 iostream,那么您可以使用 . std::string
,而不是使用char
数组,这意味着您需要担心的内存管理要少得多。
好吧,如果您使用 C++,您可能想要使用 OOP,对吗?我猜 cstdio(又名 stdio.h)只是为了与 C 兼容。