Você citou a resposta:
Os buffers de saída podem ser liberados explicitamente para forçar a gravação do buffer.
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:
for (int i = 0; i < 5; i++) {
std::cout << ".";
sleep(1); // or something similar
}
std::cout << "\n";
será impresso de .....
uma vez (para sleep
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ções cout
para que você não precise de uma liberação explícita para fazer isso:
std::string colour;
std::cout << "Enter your favourite colour: ";
std::cin >> colour;