Pourquoi le type de basic_streambuf char_type « de gptr » * plutôt que const char_type *?
-
08-10-2019 - |
Question
L'élément de basic_streambuf
pour définir les trois "RCTG" du streambuf, setg
, est déclaré comme suit:
protected:
void setg(char_type *gback, char_type *gptr, char_type *egptr);
Je me demande: pourquoi le type de chaque gptr fait char_type*
au lieu de const char_type*
? Est-il sûr d'utiliser const_cast
ici pour utiliser des pointeurs const char pour ces RCTG?
La solution
Il est pas const car l'interface streambuf
ne sait pas comment vous peuplant la mémoire tampon. Par exemple, les méthodes de underflow
et uflow
peuvent tirer n octets d'un fichier ou similaire et remplir le tampon existant du streambuf. Vous pouvez également utiliser le même système de stockage pour les tampons pour un flux de flux de lecture / écriture. Le streambuf est un tampon, un cache si vous voulez. Il se trouve entre la fonctionnalité mise en forme des [io]stream
et le flux de caractères réel sous-jacent (généralement un fichier). Il est une fenêtre sur ce flux sous-jacent, et il est logique de réutiliser le stockage pour cette fenêtre (ce qui signifie qu'il est probablement pas const).
Est-il sûr de rejetterai la const-ness? Peut être. Cela dépendra de la mise en œuvre de streambuf réelle et comment il est utilisé.