gpt4 book ai didi

c++ - 什么时候调用 stringbuf::flush?

转载 作者:行者123 更新时间:2023-11-27 23:08:55 26 4
gpt4 key购买 nike

struct encrypt_stream : public std::stringbuf
{
int sync() { encrypt_buffer(); flush_to_device(); }
...
private:
void encrypt_buffer();
void flush_to_device();
};

我想写这个类来加密文本数据。每次刷新此 stringbuf 对象时,都会调用 sync 并将缓冲区的加密版本发送到设备。加密文本在很大程度上取决于调用 flush 的时刻。是否存在可以在用户不要求的情况下对该对象调用 flush 的棘手情况?

我知道 flush 在接收到 std::endl 时被调用,但是还有其他我不知道的情况吗?

最佳答案

flush() 在这些情况下被调用:

  • 当使用 std::endl 时(即显式调用 std::ostream::flush())[§27.7.3.7/7]<
  • 当调用流的析构函数时 [§27.5.3.1.6/4]
  • 当它是 tie() 的流执行读取时。 [§27.7.2.1.3/2]
  • 当文件流被重新定位时。
  • 当流达到其缓冲区中分配的最大字符数时,调用 overflow() 将内容提取到外部设备时,[§27.6.3.4.5/3]<
  • 或者在输入流的情况下,当 gptr() == egptr() 时,调用 underflow() 以丢弃内容并将其缓冲区与外部设备。 [§27.6.3.4.3/7]

这就是我对标准 IOStreams 的了解。这可能会因您的流或流缓冲区的实现而异。

关于c++ - 什么时候调用 stringbuf::flush?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21440006/

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