Da una bozza di documento standard C ++ 17:
30.4.3 Oggetti Narrow Stream [narrow.stream.objects]
istream cin;
1 L'oggetto cincontrolla l'input da un buffer di flusso associato all'oggetto stdin, dichiarato in <cstdio>(30.11.1).
2 Dopo che l'oggetto cinè stato inizializzato, cin.tie()ritorna &cout. Il suo stato è altrimenti lo stesso richiesto per basic_ios<char>::init(30.5.5.2).
ostream cout;
3 L'oggetto coutcontrolla l'output in un buffer di flusso associato all'oggetto stdout, dichiarato in <cstdio>(30.11.1).
ostream cerr;
4 L'oggetto cerrcontrolla l'output in un buffer di flusso associato all'oggetto stderr, dichiarato in <cstdio>(30.11.1).
5 Dopo che l'oggetto cerrè stato inizializzato, cerr.flags() & unitbufè diverso da zero e cerr.tie()restituisce &cout. Il suo stato è altrimenti lo stesso richiesto per basic_ios<char>::init(30.5.5.2).
ostream clog;
6 L'oggetto clogcontrolla l'output in un buffer di flusso associato all'oggetto stderr, dichiarato in <cstdio>(30.11.1).
Discussione...
coutscrive a stdout; cerre clogastderr
Standard Out ( stdout) ha lo scopo di ricevere un output non di errore e non diagnostico dal programma, come l'output di un'elaborazione riuscita che può essere visualizzato all'utente finale o trasmesso in streaming in una fase di elaborazione successiva.
Standard Error ( stderr) è inteso per l'output diagnostico, come i messaggi di avviso e di errore che indicano che il programma non ha o potrebbe non aver prodotto l'output che l'utente potrebbe aspettarsi. Questo input può essere visualizzato all'utente finale anche se i dati di output vengono reindirizzati a un'ulteriore fase di elaborazione.
cine cerrsono legati acout
Entrambi svuotano coutprima di gestire le operazioni di I / O. Ciò garantisce che i prompt inviati coutsiano visibili prima dei blocchi di programma da cui leggere l'input cine che l'output precedente coutvenga cancellato prima di scrivere un errore cerr, il che mantiene i messaggi in ordine cronologico della loro generazione quando entrambi sono diretti allo stesso terminale / file / eccetera..
Questo contrasta con clog: se scrivi lì, non verrà bufferizzato e non è legato a nulla, quindi bufferizzerà quantità di registrazione di dimensioni decenti prima dello scaricamento. Ciò produce la massima velocità di trasmissione dei messaggi, ma significa che i messaggi potrebbero non essere rapidamente visibili a un potenziale consumatore che legge il terminale o che segue il registro.
stdout,stdin(percin), estderrche utilizza per impostazione predefinita. Credoclogsia solocerrcon una modifica del buffering.