我在对另一个问题的评论中提出了这个问题,我被要求将其作为一个正确的问题。
为什么我要使用iostream而不是stdio?更具体地说,std :: getline必须提供什么超过C等价物?
请不要抨击语言。
答案 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)
您可以获得可以任何方式实现的抽象输入/输出/可搜索流。
你写入/读取流可能是文件,内存,字符串甚至自定义过滤器或zlib压缩器!
某些C库提供了设置读/写处理程序(BSD和Linux)的选项,但仍然没有 与std :: streambuf相同的功能,这些都不是标准的。
您可以使用特定于流的区域设置,允许您根据要传输的任何区域设置格式化数据 线程特定的方式。
更多?
答案 3 :(得分:1)
首先,如果您使用iostream,那么您可以使用std::string
,而不是使用char
数组,这意味着您需要担心的内存管理要少得多。
答案 4 :(得分:0)
好吧,如果你使用C ++,你可能想要使用OOP,对吧?我猜cstdio(又名stdio.h)只是为了与C兼容。