![](/img/trans.png)
[英]invalid conversion from 'const char*' to 'std::basic_ostream<char>::char_type {aka char}'
[英]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
接口不知道你是如何填充缓冲区的。 例如, underflow
和uflow
方法可以从文件或类似物中提取n个字节,并填充streambuf的现有缓冲区。 您可能还使用相同的存储空间来读取/写入流的缓冲区。 streambuf是一个缓冲区,如果你愿意的话就是缓存。 它位于[io]stream
的格式化功能和实际的底层字符流(通常是文件)之间。 它是该底层流的窗口,重用该窗口的存储是有意义的(这意味着它可能不是const)。
抛弃常数是否安全? 也许。 这取决于实际的streambuf实现及其使用方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.