c++ - 为什么 "gptr"类型的basic_streambuf是char_type*而不是const char_type*?

标签 c++ iostream const-correctness streambuf

设置流缓冲的三个“gptr”的basic_streambuf成员,setg声明为:

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

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

最佳答案

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

抛弃常量是否安全?可能是。这将取决于实际的 streambuf 实现及其使用方式。

关于c++ - 为什么 "gptr"类型的basic_streambuf是char_type*而不是const char_type*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4361926/

相关文章:

C++ iostream 以多个字节的定界符读取

C++ 运算符 + 和 * 非常量重载

c++ - 是否可以从 const 方法迭代链表

c++ - 是否可以用 lambda 初始化变量(当复制 ctor 被删除时)?

c++ - 从 ARGB 到灰度的转换 - 结果很好,但颠倒了

c++ - iostream 或 C++ 中的其他地方是否有称为时间的东西?

C++ 运算符 << (void*)

c++ - 复合赋值中关于 `const` 的困惑

c++ - 友元函数无法访问私有(private)数据成员

c++ - 使用 Qt,有什么好方法可以分解包含 GUI 逻辑的大型源文件?