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 指针是否安全?
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 指针是否安全?
它不是 const ,因为streambuf
接口不知道您如何填充缓冲区。例如,underflow
anduflow
方法可以从文件或类似文件中提取n个字节并填充 streambuf 的现有缓冲区。您也可能对读/写流的缓冲区使用相同的存储。streambuf 是一个缓冲区,如果你愿意的话,是一个缓存。它位于格式化功能[io]stream
和实际底层字符流(通常是文件)之间。它是该底层流的一个窗口,重用该窗口的存储是有意义的(这意味着它可能不是 const)。
抛弃 const-ness 是否安全?也许。这将取决于实际的 streambuf 实现及其使用方式。