Estou aprendendo C ++ e encontrei algo que não consigo entender:
Os buffers de saída podem ser liberados explicitamente para forçar a gravação do buffer. Por padrão, a leitura é
cin
liberadacout
;cout
também é liberado quando o programa termina normalmente.
Portanto, esvaziando o buffer (por exemplo, um buffer de saída): isso limpa o buffer excluindo tudo nele ou limpa o buffer exibindo tudo nele? Ou esvaziar o buffer significa algo completamente diferente?
Você citou a resposta:
Ou seja, você pode precisar "liberar" a saída para fazer com que ela seja gravada no fluxo subjacente (que pode ser um arquivo ou, nos exemplos listados, um terminal).
Geralmente, stdout / cout é armazenado em buffer de linha: a saída não é enviada ao sistema operacional até que você escreva uma nova linha ou esvazie explicitamente o buffer. A vantagem é que algo como
std::cout << "Mouse moved (" << p.x << ", " << p.y << ")" << endl
causa apenas uma gravação no "arquivo" subjacente em vez de seis, o que é muito melhor para o desempenho. A desvantagem é que um código como:será impresso de
.....
uma vez (parasleep
implementação exata , consulte esta questão ). Nesses casos, você desejará um adicional<< std::flush
para garantir que a saída seja exibida.Lendo as
cin
liberaçõescout
para que você não precise de uma liberação explícita para fazer isso:fonte
sleep()
(POSIX) comSleep()
(Windows)cout
com um namespace (ou seja,std::cout
) , mas não o fez para oendl
, que também deve exigir essa qualificação.Limpe o buffer exibindo tudo.
fonte