À partir d'un projet de document standard C ++ 17:
30.4.3 Objets de flux étroits [narrow.stream.objects]
istream cin;
1 L'objet cin
contrôle l'entrée d'un tampon de flux associé à l'objet stdin
, déclaré dans <cstdio>
(30.11.1).
2 Une fois l'objet cin
initialisé, cin.tie()
retourne &cout
. Son état est par ailleurs le même que celui requis pour basic_ios<char>::init
(30.5.5.2).
ostream cout;
3 L'objet cout
contrôle la sortie vers un tampon de flux associé à l'objet stdout
, déclaré dans <cstdio>
(30.11.1).
ostream cerr;
4 L'objet cerr
contrôle la sortie vers un tampon de flux associé à l'objet stderr
, déclaré dans<cstdio>
(30.11.1).
5 Une fois l'objet cerr
initialisé, il cerr.flags() & unitbuf
est différent de zéro et cerr.tie()
revient &cout
. Son état est par ailleurs le même que celui requis pour basic_ios<char>::init
(30.5.5.2).
ostream clog;
6 L'objet clog
contrôle la sortie vers un tampon de flux associé à l'objetstderr
, déclaré dans <cstdio>
(30.11.1).
Discussion...
cout
écrit à stdout
; cerr
etclog
àstderr
Sortie standard (stdout
) est destiné à recevoir une sortie sans erreur et sans diagnostic du programme, telle que la sortie d'un traitement réussi qui peut être affichée à l'utilisateur final ou diffusée dans une étape de traitement supplémentaire.
Erreur standard (stderr
) est destinée à la sortie de diagnostic, comme les messages d'avertissement et d'erreur indiquant que le programme n'a pas ou n'a peut-être pas produit la sortie attendue par l'utilisateur. Cette entrée peut être affichée à l'utilisateur final même si les données de sortie sont acheminées vers une étape de traitement supplémentaire.
cin
et cerr
sont liés àcout
Ils sont tous deux vidés cout
avant de gérer eux-mêmes les opérations d'E / S. Cela garantit que les invites envoyées à cout
sont visibles avant que le programme ne bloque l'entrée à partir de cin
, et que la sortie précédente vers cout
est vidée avant d'écrire une erreur viacerr
desquels , ce qui maintient les messages dans l'ordre chronologique de leur génération lorsque les deux sont dirigés vers le même terminal / fichier / etc..
Cela contraste avec clog
- si vous y écrivez, il ne sera pas mis en mémoire tampon et n'est lié à rien, il mettra donc en mémoire tampon des quantités de journalisation de taille décente avant le vidage. Cela donne le débit de messages le plus élevé, mais signifie que les messages peuvent ne pas être rapidement visibles pour un consommateur potentiel qui lit le terminal ou qui suit le journal.
stdout
,stdin
(pourcin
), etstderr
qu'il utilise par défaut. Je crois queclog
c'est justecerr
avec un changement de tampon.