Maison > développement back-end > C++ > std::setw() et Stringstreams : manipulateurs collants et non collants : quelle est la différence ?

std::setw() et Stringstreams : manipulateurs collants et non collants : quelle est la différence ?

Linda Hamilton
Libérer: 2024-12-11 12:37:11
original
807 Les gens l'ont consulté

std::setw() and Stringstreams: Sticky vs. Non-Sticky Manipulators—What's the Difference?

Manipulateurs vs objets de format

Lors de la tentative de construction d'un flux de chaînes, une idée fausse courante surgit concernant le comportement de std::setw() . Supposer que cela affecterait perpétuellement le flux de chaînes était une hypothèse incorrecte, car il est réinitialisé après chaque insertion. Cet article vise à clarifier la distinction entre les manipulateurs collants et non collants et les objets de format, en abordant les questions suivantes :

  • Pourquoi std::setw() se comporte-t-il de cette manière ?
  • Existe-t-il d'autres manipulateurs ayant un comportement similaire ?
  • Comment faire std::ios_base::width() et std::setw() diffèrent en termes de comportement ?
  • Où peut-on trouver une documentation claire concernant ce comportement en ligne ?

Manipulateurs collants

Les manipulateurs à l'intérieur std::ios_base peut être classé en deux catégories :

  • Manipulateurs renvoyant des objets :Ces manipulateurs n'affectent pas directement l'objet flux et ne présentent donc pas de « visibilité ». Cela inclut setw.
  • Manipulateurs renvoyant des flux : Ces manipulateurs ont un impact direct sur l'objet flux et sont donc "collants", ce qui signifie que les modifications qu'ils apportent persistent jusqu'à ce qu'elles soient explicitement modifiées par un autre manipulateur. Les exemples incluent setiosflags et setfill.

Objets de format

Les objets de format sont utilisés pour modifier temporellement les propriétés de formatage d'un flux. Contrairement aux manipulateurs, ils n’affectent pas directement l’objet flux. Un exemple de ceci est l'objet de format PutSquareBracket, qui permet une modification temporaire du formatage sans affecter l'état permanent.

Conclusion

std::setw() est unique parmi les manipulateurs dans la mesure où c'est le seul qui ne colle pas. Le manque de documentation concernant son comportement spécifique peut être attribué à sa similitude perçue avec d'autres manipulateurs. Cependant, la réalité est qu'il se comporte différemment en raison de l'exigence dans les opérations de sortie formatées de définir explicitement la largeur à zéro.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal