【问题标题】:Why is the "gptr" type of basic_streambuf char_type* rather than const char_type*?为什么“gptr”类型是 basic_streambuf char_type* 而不是 const char_type*?
【发布时间】:2010-12-05 23:19:17
【问题描述】:

设置streambuf的三个“gptrs”的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 指针是否安全?

【问题讨论】:

    标签: c++ iostream const-correctness streambuf


    【解决方案1】:

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

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

    【讨论】:

    • 当然! :) 我很困惑,因为我目前正在为一个常量 C 字符串编写一个流缓冲区。出于我的目的,underflowuflow 没有被使用。傻我。 +1 以及写一个非常好的答案。
    猜你喜欢
    • 2015-04-17
    • 1970-01-01
    • 2016-01-06
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多