好吧,我现在很困惑;什么时候会有人在流上使用流缓冲区--或者不是?
阅读优先选择和一些有关这方面的在线主题只会增加混乱。在我看来,std::basic_istream似乎是缓冲区的“抽象”。这样,人们就不必去处理本地化等问题了。
但是,在读取文件数据时,仍然需要这样做--那么它实际上抽象了什么呢?
另一方面,std::basic_streambuf带来了什么?
然后是std::istream_iterator和std::istreambuf_iterator。它们都从“流”中读取元素。这增加了更多的混乱:上面的迭代器有什么不同吗?
PS:在这里使用istream,当然也可以是ostream或其他任何东西。
PPS:我应该在搜索诸如这个堆叠溢出问题这样的例子时添加混淆。
发布于 2014-08-09 21:20:30
istream定义了用户界面:operator>>、read等等。这就是您想要进行输入时所调用的内容。
流光定义了虚拟成员函数:underflow、sync等。当您想要编写自己的输入类时,这就是您从中派生出来的。boost.iostreams使它变得容易。
迭代器调用operator>> (因此它将输入解释为定义了operator>>的某种类型的对象序列,遍历区域设置、跳过空格等)
迭代器直接访问一个流(因此它只能读取字符,不涉及区域设置,空格不是特殊的)
https://stackoverflow.com/questions/25222483
复制相似问题