Почему тип gptr для basic_streambuf char_type* вместо const char_type*?
basic_streambuf
член, чтобы установить три "gptrs" streambuf, setg
, объявляется как:
protected:
void setg(char_type *gback, char_type *gptr, char_type *egptr);
Мне интересно: почему был сделан тип каждого gptr char_type*
вместо const char_type*
? Безопасно ли использовать const_cast
здесь использовать const char указатели для этих gptrs?
1 ответ
Это не const, потому что streambuf
Интерфейс не знает, как вы заполняете буфер. Например, underflow
а также uflow
методы могут извлечь n байтов из файла или аналогичного файла и заполнить существующий буфер потокового буфера. Вы также можете использовать то же хранилище для буферов для потока чтения / записи. Streambuf - это буфер, кеш, если хотите. Он находится между функциями форматирования [io]stream
и фактический базовый поток символов (обычно файл). Это окно в этом основном потоке, и имеет смысл повторно использовать хранилище для этого окна (что означает, что оно, вероятно, не является постоянным).
Безопасно ли отбрасывать постоянство? Может быть. Это будет зависеть от фактической реализации streambuf и от того, как она используется.