繁体   English   中英

为什么“gptr”类型为basic_streambuf char_type *而不是const char_type *?

[英]Why is the “gptr” type of basic_streambuf char_type* rather than const char_type*?

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM