作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
设置流缓冲的三个“gptr”的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 指针是否安全?
最佳答案
它不是 const,因为 streambuf
接口(interface)不知道您如何填充缓冲区。例如,underflow
和 uflow
方法可以从文件或类似文件中提取 n 个字节,并填充 streambuf 的现存缓冲区。您也可以为读/写流流的缓冲区使用相同的存储。 streambuf 是一个缓冲区,如果你愿意的话,它是一个缓存。它介于 [io]stream
的格式化功能和实际的底层字符流(通常是文件)之间。它是底层流的一个窗口,重用该窗口的存储是有意义的(这意味着它可能不是常量)。
抛弃常量是否安全?可能是。这将取决于实际的 streambuf 实现及其使用方式。
关于c++ - 为什么 "gptr"类型的basic_streambuf是char_type*而不是const char_type*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4361926/
设置流缓冲的三个“gptr”的basic_streambuf成员,setg声明为: protected: void setg(char_type *gback, char_type *gptr,
我是一名优秀的程序员,十分优秀!