Почему тип gptr для basic_streambuf char_type * вместо const char_type *? - PullRequest
4 голосов
/ 06 декабря 2010

Элемент 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 для этих gptr?

1 Ответ

6 голосов
/ 06 декабря 2010

Это не константа, потому что интерфейс streambuf не знает, как вы заполняете буфер. Например, методы underflow и uflow могут извлечь n байтов из файла или аналогичного файла и заполнить существующий буфер streambuf. Вы также можете использовать одно и то же хранилище для буферов для потока чтения / записи. Streambuf - это буфер, кеш, если хотите. Он находится между функциональностью [io]stream и фактическим базовым символьным потоком (обычно файлом). Это окно в этом основном потоке, и имеет смысл повторно использовать хранилище для этого окна (что означает, что оно, вероятно, не является постоянным).

Безопасно ли отбрасывать постоянство? Может быть. Это будет зависеть от фактической реализации streambuf и от того, как она используется.

...