À partir d'un projet de document standard C ++ 17:
30.4.3 Objets de flux étroits [narrow.stream.objects]
istream cin;
1 L'objet cincontrô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 cininitialisé, 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 coutcontrôle la sortie vers un tampon de flux associé à l'objet stdout, déclaré dans <cstdio>(30.11.1).
ostream cerr;
4 L'objet cerrcontrôle la sortie vers un tampon de flux associé à l'objet stderr, déclaré dans<cstdio> (30.11.1).
5 Une fois l'objet cerrinitialisé, il cerr.flags() & unitbufest 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 clogcontrôle la sortie vers un tampon de flux associé à l'objetstderr , déclaré dans <cstdio>(30.11.1).
Discussion...
coutécrit à stdout; cerretclog à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.
cinet cerrsont liés àcout
Ils sont tous deux vidés coutavant de gérer eux-mêmes les opérations d'E / S. Cela garantit que les invites envoyées à coutsont visibles avant que le programme ne bloque l'entrée à partir de cin, et que la sortie précédente vers coutest 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), etstderrqu'il utilise par défaut. Je crois queclogc'est justecerravec un changement de tampon.