为什么“gptr”是basic_streambuf char_type* 的类型而不是 const char_type*?
用于设置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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
它不是 const,因为
streambuf
接口不知道您如何填充缓冲区。例如,underflow
和uflow
方法可能会从文件或类似文件中提取 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 theunderflow
anduflow
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.