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?

Était-ce utile?

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é.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top