2016-10-31 3 views
0

Est-ce que la norme définit quels manipulateurs iomanip sont collants et lesquels ne le sont pas?Y at-il une ressource officielle pour les manipulateurs collants?

Je continue à me trouver référence à: https://stackoverflow.com/a/1533222/2642059

Ce qui, est une excellente réponse, mais dit même:

sur ma version

Ceci, couplé avec le fait que je ne peux pas trouver le concept de collant sur http://en.cppreference.com ou http://www.cplusplus.com me conduit à me demander s'il s'agit d'un concept défini par l'implémentation.

+1

Ils sont tous collants, sauf 'setw' qui est affecté par l'exigence pour les opérateurs standard d'appeler' width (0) 'à la fin de leurs opérations. –

+2

@downvoters Puis-je avoir une raison pour la downvote? Y a-t-il quelque chose qui ne va pas dans cette question (autre que le downvoting obligatoire pour les questions marquées avec C++?) –

Répondre

2

Non « officielle », mais cppreference.com dit, dans std::setw

La propriété largeur du cours d'eau sera remis à zéro (ce qui signifie « non spécifié ») se sont appelés l'une des fonctions suivantes:

Comme l'historique des modifications dans cppreference says, cette liste a été compilé en greping le projet de norme pour "largeur" ​​

Tous les autres manipulateurs sont "collants", comme dans, les changements d'état de flux qu'ils effectuent persistent jusqu'à ce qu'ils soient explicitement modifiés à nouveau.

2

Il n'y a pas vraiment de concept de manipulateurs collants/non collants dans la bibliothèque C++ standard. Le seul manipulateur non collant dans la bibliothèque C++ standard est le width(). Aucun des autres indicateurs de formatage standard n'est modifié en tant que partie de l'entrée ou de la sortie. Ce que font les utilisateurs et s'ils sont réinitialisés après chaque utilisation est entièrement à leur charge.

+0

Y at-il une documentation qui avertit que 'setw' est écrasé alors que d'autres manipulateurs n'ont pas dit avertissement? On dirait que l'absence d'avertissement sur tous les modificateurs pourrait être une bonne base pour une déclaration officielle? –

+1

@JonathanMee: comme Bo mentionné dans le commentaire, les opérateurs de bibliothèque standard affectant 'width()' prennent soin d'indiquer qu'ils appellent 'width (0)'. Il n'y a pas d'avertissement en tant que tel. Il y a à peu près une demi-douzaine de lieux dispersés sur la norme où 'width (0)' est appelée (j'ai trouvé 8 emplacements dispersés des chapitres chaînes, locales et IOStreams). –

+1

@JonathanMee cppreference tente d'énumérer tous les piétinements sur http://fr.cppreference.com/w/cpp/io/manip/setw – Cubbi