une petite question me tarude : quand j'écris quelques chose du style
cout << hex << setwidth( 2 ) << setfill( 0 );
est-ce que le formattage est définitivement changé et n'est-il valable
que pour la prochaine insertion? Et y a t'il justement un moyen de
changer de manière définitive ou au contraire temporaire le formatage
d'un stream?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Grasshoper
25/04/2008 14:49 - Guillaume GOURDIN :
est-ce que le formattage est définitivement changé et n'est-il valable que pour la prochaine insertion? Et y a t'il justement un moyen de changer de manière définitive ou au contraire temporaire le formatage d'un stream?
Pour autant que je puisse dire, ce tableau est juste : http://cpp.developpez.com/faq/cpp/?page=SL#SL_stream_iomanip
25/04/2008 14:49 - Guillaume GOURDIN :
est-ce que le formattage est définitivement changé et n'est-il valable
que pour la prochaine insertion? Et y a t'il justement un moyen de
changer de manière définitive ou au contraire temporaire le formatage
d'un stream?
Pour autant que je puisse dire, ce tableau est juste :
http://cpp.developpez.com/faq/cpp/?page=SL#SL_stream_iomanip
est-ce que le formattage est définitivement changé et n'est-il valable que pour la prochaine insertion? Et y a t'il justement un moyen de changer de manière définitive ou au contraire temporaire le formatage d'un stream?
Pour autant que je puisse dire, ce tableau est juste : http://cpp.developpez.com/faq/cpp/?page=SL#SL_stream_iomanip
Guillaume GOURDIN
Grasshoper wrote:
25/04/2008 14:49 - Guillaume GOURDIN :
est-ce que le formattage est définitivement changé et n'est-il valable que pour la prochaine insertion? Et y a t'il justement un moyen de changer de manière définitive ou au contraire temporaire le formatage d'un stream?
Pour autant que je puisse dire, ce tableau est juste : http://cpp.developpez.com/faq/cpp/?page=SL#SL_stream_iomanip
Merci! Y a t'il une raison particuliere pour que setw ne soit pas persistant? Je ne trouve pas ça très pratique, en effet, je voudrais un affichage du type :
0x00 0x01 0x02 0x03 0x04...
ce qui implique que je vais devoir ajouter un 'setw(2)' avant chaque insertion... :-/
Grasshoper wrote:
25/04/2008 14:49 - Guillaume GOURDIN :
est-ce que le formattage est définitivement changé et n'est-il valable
que pour la prochaine insertion? Et y a t'il justement un moyen de
changer de manière définitive ou au contraire temporaire le formatage
d'un stream?
Pour autant que je puisse dire, ce tableau est juste :
http://cpp.developpez.com/faq/cpp/?page=SL#SL_stream_iomanip
Merci! Y a t'il une raison particuliere pour que setw ne soit pas
persistant? Je ne trouve pas ça très pratique, en effet, je voudrais un
affichage du type :
0x00 0x01 0x02 0x03 0x04...
ce qui implique que je vais devoir ajouter un 'setw(2)' avant chaque
insertion... :-/
est-ce que le formattage est définitivement changé et n'est-il valable que pour la prochaine insertion? Et y a t'il justement un moyen de changer de manière définitive ou au contraire temporaire le formatage d'un stream?
Pour autant que je puisse dire, ce tableau est juste : http://cpp.developpez.com/faq/cpp/?page=SL#SL_stream_iomanip
Merci! Y a t'il une raison particuliere pour que setw ne soit pas persistant? Je ne trouve pas ça très pratique, en effet, je voudrais un affichage du type :
0x00 0x01 0x02 0x03 0x04...
ce qui implique que je vais devoir ajouter un 'setw(2)' avant chaque insertion... :-/
pjb
Guillaume GOURDIN writes:
Grasshoper wrote:
25/04/2008 14:49 - Guillaume GOURDIN :
est-ce que le formattage est définitivement changé et n'est-il valable que pour la prochaine insertion? Et y a t'il justement un moyen de changer de manière définitive ou au contraire temporaire le formatage d'un stream? Pour autant que je puisse dire, ce tableau est juste :
Merci! Y a t'il une raison particuliere pour que setw ne soit pas persistant? Je ne trouve pas ça très pratique, en effet, je voudrais un affichage du type :
0x00 0x01 0x02 0x03 0x04...
ce qui implique que je vais devoir ajouter un 'setw(2)' avant chaque insertion... :-/
Par défaut, le formatage se fait avec une largeur variable ajusté à chaque objet imprimé.
Si setw() était persistent, il faudrait pouvoir spécifier cette largeur variable, soit en utilisant une valeur spéciale (pas trop ragoutant), soit en créant une méthode spéciale resetw() (je suppose que les programmeurs de la stl étaient trop faignant pour ça), soit en surchargeant la méthode: class default{public:default(){}}; ... setw(const default&){...} ... aussi assez laborieux à définir, même si ce serait assez facile à utiliser: cout<<setw(default());
Et il faut aussi voir comment on l'utiliserait le plus souvent. Prenons ton exemple:
est-ce que le formattage est définitivement changé et n'est-il
valable que pour la prochaine insertion? Et y a t'il justement un
moyen de changer de manière définitive ou au contraire temporaire
le formatage d'un stream?
Pour autant que je puisse dire, ce tableau est juste :
Merci! Y a t'il une raison particuliere pour que setw ne soit pas
persistant? Je ne trouve pas ça très pratique, en effet, je voudrais
un affichage du type :
0x00 0x01 0x02 0x03 0x04...
ce qui implique que je vais devoir ajouter un 'setw(2)' avant chaque
insertion... :-/
Par défaut, le formatage se fait avec une largeur variable ajusté à
chaque objet imprimé.
Si setw() était persistent, il faudrait pouvoir spécifier cette
largeur variable, soit en utilisant une valeur spéciale (pas trop
ragoutant), soit en créant une méthode spéciale resetw() (je suppose
que les programmeurs de la stl étaient trop faignant pour ça), soit en
surchargeant la méthode:
class default{public:default(){}};
... setw(const default&){...} ...
aussi assez laborieux à définir, même si ce serait assez facile à utiliser:
cout<<setw(default());
Et il faut aussi voir comment on l'utiliserait le plus souvent. Prenons ton exemple:
est-ce que le formattage est définitivement changé et n'est-il valable que pour la prochaine insertion? Et y a t'il justement un moyen de changer de manière définitive ou au contraire temporaire le formatage d'un stream? Pour autant que je puisse dire, ce tableau est juste :
Merci! Y a t'il une raison particuliere pour que setw ne soit pas persistant? Je ne trouve pas ça très pratique, en effet, je voudrais un affichage du type :
0x00 0x01 0x02 0x03 0x04...
ce qui implique que je vais devoir ajouter un 'setw(2)' avant chaque insertion... :-/
Par défaut, le formatage se fait avec une largeur variable ajusté à chaque objet imprimé.
Si setw() était persistent, il faudrait pouvoir spécifier cette largeur variable, soit en utilisant une valeur spéciale (pas trop ragoutant), soit en créant une méthode spéciale resetw() (je suppose que les programmeurs de la stl étaient trop faignant pour ça), soit en surchargeant la méthode: class default{public:default(){}}; ... setw(const default&){...} ... aussi assez laborieux à définir, même si ce serait assez facile à utiliser: cout<<setw(default());
Et il faut aussi voir comment on l'utiliserait le plus souvent. Prenons ton exemple:
une petite question me tarude : quand j'écris quelques chose du style
cout << hex << setwidth( 2 ) << setfill( 0 );
est-ce que le formattage est définitivement changé et n'est-il valable que pour la prochaine insertion?
S'il s'agit là de std::setfill ou std::hex, c'est permanent. S'il s'agit des manipulateurs personels, ça dépend de comment tu les as écrits -- typiquement, on fait en sort que les effets persistent jusqu'à la fin de l'expression complète.
Et y a t'il justement un moyen de changer de manière définitive ou au contraire temporaire le formatage d'un stream?
Plus ou moins. Tous les attributes de formattage sauf la taille (width) persiste. Donc, si tu fais : std::cout.setf( std::ios::hex, std::ios::basefield ) ; , ça persiste. En revanche, normalement, on écrit ces propres manipulateur de façon à ce que le destructeur résitue l'état antérieur ; on écrirait donc : std::cout << HexFmt( 2 ) << valeur ; et le manipulateur laisse std::cout comme il l'a trouvé (mais on peut écrire: HexFmt hex( 2 ) ; std::cout << hex << v1 << std::endl ; std::cout << hex << v2 << std::endl ; etc. ; le format serait rétabli quand hex est détruit).
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
On Apr 25, 2:49 pm, Guillaume GOURDIN <tr...@hotmail.com> wrote:
une petite question me tarude : quand j'écris quelques chose du style
cout << hex << setwidth( 2 ) << setfill( 0 );
est-ce que le formattage est définitivement changé et n'est-il
valable que pour la prochaine insertion?
S'il s'agit là de std::setfill ou std::hex, c'est permanent.
S'il s'agit des manipulateurs personels, ça dépend de comment tu
les as écrits -- typiquement, on fait en sort que les effets
persistent jusqu'à la fin de l'expression complète.
Et y a t'il justement un moyen de changer de manière
définitive ou au contraire temporaire le formatage d'un
stream?
Plus ou moins. Tous les attributes de formattage sauf la taille
(width) persiste. Donc, si tu fais :
std::cout.setf( std::ios::hex, std::ios::basefield ) ;
, ça persiste. En revanche, normalement, on écrit ces propres
manipulateur de façon à ce que le destructeur résitue l'état
antérieur ; on écrirait donc :
std::cout << HexFmt( 2 ) << valeur ;
et le manipulateur laisse std::cout comme il l'a trouvé (mais on
peut écrire:
HexFmt hex( 2 ) ;
std::cout << hex << v1 << std::endl ;
std::cout << hex << v2 << std::endl ;
etc. ; le format serait rétabli quand hex est détruit).
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
une petite question me tarude : quand j'écris quelques chose du style
cout << hex << setwidth( 2 ) << setfill( 0 );
est-ce que le formattage est définitivement changé et n'est-il valable que pour la prochaine insertion?
S'il s'agit là de std::setfill ou std::hex, c'est permanent. S'il s'agit des manipulateurs personels, ça dépend de comment tu les as écrits -- typiquement, on fait en sort que les effets persistent jusqu'à la fin de l'expression complète.
Et y a t'il justement un moyen de changer de manière définitive ou au contraire temporaire le formatage d'un stream?
Plus ou moins. Tous les attributes de formattage sauf la taille (width) persiste. Donc, si tu fais : std::cout.setf( std::ios::hex, std::ios::basefield ) ; , ça persiste. En revanche, normalement, on écrit ces propres manipulateur de façon à ce que le destructeur résitue l'état antérieur ; on écrirait donc : std::cout << HexFmt( 2 ) << valeur ; et le manipulateur laisse std::cout comme il l'a trouvé (mais on peut écrire: HexFmt hex( 2 ) ; std::cout << hex << v1 << std::endl ; std::cout << hex << v2 << std::endl ; etc. ; le format serait rétabli quand hex est détruit).
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34