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

发布于 2024-10-06 04:10:06 字数 320 浏览 7 评论 0原文

用于设置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 来为这些 gptr 使用 const char 指针是否安全?

The basic_streambuf member to set the three "gptrs" of the streambuf, setg, is declared as:

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

I am wondering: why was the type of each gptr made char_type* instead of const char_type*? Is it safe to use const_cast here to use const char pointers for these gptrs?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

南冥有猫 2024-10-13 04:10:06

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

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

It's not const because the streambuf interface doesn't know how you're populating the buffer. For example the underflow and uflow methods may pull n bytes from a file or similar and populate the extant buffer of the streambuf. You may also be using the same storage for the buffers for a read/write stream stream. The streambuf is a buffer, a cache if you will. It sits between the formatting functionality of the [io]stream and the actual underlying character stream (usually a file). It's a window on to that underlying stream, and it makes sense to reuse the storage for that window (which means it's probably not const).

Is it safe to cast away the const-ness? Maybe. It will depend on the actual streambuf implementation and how it is used.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文