De un borrador de documento estándar C ++ 17:
30.4.3 Objetos de corriente estrecha [narrow.stream.objects]
istream cin;
1 El objeto cincontrola la entrada de un búfer de flujo asociado con el objeto stdin, declarado en <cstdio>(30.11.1).
2 Una vez cininicializado el objeto , cin.tie()vuelve &cout. Por lo demás, su estado es el mismo que el requerido para basic_ios<char>::init(30.5.5.2).
ostream cout;
3 El objeto coutcontrola la salida a un búfer de flujo asociado con el objeto stdout, declarado en <cstdio>(30.11.1).
ostream cerr;
4 El objeto cerrcontrola la salida a un búfer de flujo asociado con el objeto stderr, declarado en <cstdio>(30.11.1).
5 Una vez cerrinicializado el objeto , cerr.flags() & unitbufes distinto de cero y cerr.tie()vuelve &cout. Por lo demás, su estado es el mismo que el requerido para basic_ios<char>::init(30.5.5.2).
ostream clog;
6 El objeto clogcontrola la salida a un búfer de flujo asociado con el objeto stderr, declarado en <cstdio>(30.11.1).
Discusión...
coutescribe a stdout; cerry clogparastderr
Salida estándar (stdout ) está destinado a recibir resultados sin errores ni diagnósticos del programa, como los resultados de un procesamiento exitoso que pueden mostrarse al usuario final o transmitirse a alguna etapa de procesamiento adicional.
Error estándar ( stderr) está destinado a la salida de diagnóstico, como los mensajes de advertencia y error que indican que el programa no ha producido o puede que no haya producido la salida que el usuario podría esperar. Esta entrada se puede mostrar al usuario final incluso si los datos de salida se canalizan a una etapa de procesamiento adicional.
ciny cerrestán atados acout
Ambos se lavan coutantes de manejar las operaciones de E / S ellos mismos. Esto asegura que las solicitudes enviadas a coutsean visibles antes de que los bloques de programa para leer la entrada cin, y que la salida anterior coutse vacíe antes de escribir un error cerr, lo que mantiene los mensajes en orden cronológico de su generación cuando ambos se dirigen al mismo terminal / archivo / etc ..
Esto contrasta con clog: si escribe allí, no se almacenará en búfer y no estará vinculado a nada, por lo que almacenará en búfer cantidades decentes de registro antes de descargar. Esto produce el mayor rendimiento de mensajes, pero significa que los mensajes pueden no ser visibles rápidamente para un consumidor potencial que lee el terminal o sigue el registro.
stdout,stdin(paracin), ystderrque se usa por defecto. Creo quecloges solocerrcon un cambio de búfer.