设置streambuf {3}的三个“gptrs”的basic_streambuf
成员被声明为:
setg
我想知道:为什么每个gptr的类型都是protected:
void setg(char_type *gback, char_type *gptr, char_type *egptr);
而不是char_type*
?在这里使用const char_type*
为这些gpt使用const char指针是否安全?
答案 0 :(得分:6)
它不是const,因为streambuf
界面并不知道你如何填充缓冲区。例如,underflow
和uflow
方法可以从文件或类似文件中提取 n 字节,并填充streambuf的现有缓冲区。您可能还使用相同的存储空间来读取/写入流的缓冲区。 streambuf是一个缓冲区,如果你愿意的话就是缓存。它位于[io]stream
的格式化功能和实际的基础字符流(通常是文件)之间。它是该底层流的窗口,重用该窗口的存储是有意义的(这意味着它可能不是const)。
抛弃常数是否安全?也许。这取决于实际的streambuf实现及其使用方式。