4

basic_streambuf设置 streambuf 的三个“gptrs”的成员声明setg为:

protected:
  void setg(char_type *gback, char_type *gptr, char_type *egptr);

我想知道:为什么每个 gptr 的类型都是char_type*而不是const char_type*const_cast在这里使用这些 gptrs 使用 const char 指针是否安全?

4

1 回答 1

6

它不是 const ,因为streambuf接口不知道您如何填充缓冲区。例如,underflowanduflow方法可以从文件或类似文件中提取n个字节并填充 streambuf 的现有缓冲区。您也可能对读/写流的缓冲区使用相同的存储。streambuf 是一个缓冲区,如果你愿意的话,是一个缓存。它位于格式化功能[io]stream和实际底层字符流(通常是文件)之间。它是该底层流的一个窗口,重用该窗口的存储是有意义的(这意味着它可能不是 const)。

抛弃 const-ness 是否安全?也许。这将取决于实际的 streambuf 实现及其使用方式。

于 2010-12-05T23:53:23.213 回答