Почему тип 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 и от того, как она используется.

Другие вопросы по тегам