De um documento padrão de rascunho C ++ 17:
30.4.3 Objetos de fluxo estreito [narrow.stream.objects]
istream cin;
1 O objeto cincontrola a entrada de um buffer de fluxo associado ao objeto stdin, declarado em <cstdio>(30.11.1).
2 Depois que o objeto ciné inicializado, cin.tie()retorna &cout. Caso contrário, seu estado é o mesmo exigido para basic_ios<char>::init(30.5.5.2).
ostream cout;
3 O objeto coutcontrola a saída para um buffer de fluxo associado ao objeto stdout, declarado em <cstdio>(30.11.1).
ostream cerr;
4 O objeto cerrcontrola a saída para um buffer de fluxo associado ao objeto stderr, declarado em <cstdio>(30.11.1).
5 Depois que o objeto cerré inicializado, cerr.flags() & unitbufé diferente de zero e cerr.tie()retorna &cout. Caso contrário, seu estado é o mesmo exigido para basic_ios<char>::init(30.5.5.2).
ostream clog;
6 O objeto clogcontrola a saída para um buffer de fluxo associado ao objeto stderr, declarado em <cstdio>(30.11.1).
Discussão...
coutescreve para stdout; cerre clogparastderr
A Saída Padrão ( stdout) destina-se a receber saída sem erro e sem diagnóstico do programa, como saída de processamento bem-sucedido que pode ser exibida para o usuário final ou transmitida para algum estágio de processamento posterior.
Erro padrão ( stderr) destina-se a saída de diagnóstico, como mensagens de aviso e erro que indicam que o programa não produziu ou pode não ter produzido a saída que o usuário espera. Essa entrada pode ser exibida para o usuário final, mesmo se os dados de saída forem canalizados para um estágio de processamento posterior.
cine cerrestão ligados acout
Ambos esvaziam coutantes de lidar com as operações de E / S. Isso garante que os prompts enviados para coutsejam visíveis antes dos blocos de programa para ler a entrada cin, e que a saída anterior coutseja liberada antes de escrever um erro cerr, o que mantém as mensagens em ordem cronológica de sua geração quando ambos são direcionados para o mesmo terminal / arquivo / etc ..
Isso contrasta com clog- se você escrever lá, ele não será armazenado em buffer e não estará vinculado a nada, portanto, armazenará em buffer quantidades decentes de registro antes de descarregar. Isso produz a maior taxa de transferência de mensagens, mas significa que as mensagens podem não ser rapidamente visíveis para um consumidor em potencial lendo o terminal ou seguindo o log.
stdout,stdin(paracin), estderrque ele usa por padrão. Eu acredito queclogé apenascerrcom uma mudança de buffer.