gpt4 book ai didi

c++ - std::basic_istream 或 std::basic_streambuf

转载 作者:行者123 更新时间:2023-11-28 06:44:41 25 4
gpt4 key购买 nike

好吧,我现在非常困惑;什么时候有人会在流上使用流缓冲区 - 或者以其他方式?

阅读 cppreference一些关于此的在线主题只会增加困惑。在我看来,std::basic_istream 是缓冲区的“抽象”。这样就不必处理本地化等问题。
但是在读取文件数据时您仍然必须这样做 - 那么它实际上抽象出了什么?

另一方面,std::basic_streambuf 带来了什么?

然后是 std::istream_iteratorstd::istreambuf_iterator。两者都从“流”中读取元素。这增加了更多的困惑:上述迭代器有什么区别吗?

PS:这里使用的是istream,当然也可以是ostream或者其他任何东西。
PPS:我应该补充一点,在谷歌上搜索诸如 this stackoverflow question 之类的例子时,增加了混淆。

最佳答案

std::basic_istream定义用户界面:operator>>read 等。当你想进行输入时,这就是你调用的。

std::basic_streambuf定义虚成员函数:underflowsync等。当你想写你自己的输入类时,这就是你派生的。 boost.iostreams让它变得简单。

std::istream_iterator调用 operator>>(因此它将输入解释为定义了 operator>> 的某种类型的对象序列,通过语言环境,跳过空格等)

std::istreambuf_iterator直接访问 streambuf(因此它只能读取字符,不涉及语言环境,空格并不特殊)

关于c++ - std::basic_istream 或 std::basic_streambuf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25222483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com