Как работает потоковый буфер в C ++? - PullRequest
0 голосов
/ 25 января 2019

Я тестирую код C ++ для потоковой буферизации.Насколько я понимаю для идеи буферизации, следующий код должен распечатывать «До цикла» и «После цикла» одновременно, даже если есть задержка в виде цикла for.Проблема в том, что он печатает их с такой задержкой цикла.Может кто-нибудь объяснить мне причину?Я передаю Cout в качестве аргумента.

void testBuffer(ostream& os){
    os << "Before loop - ";
       for(int i = 0; i < 2000000000; i++){
         // waste time
       }
    os << "After loop " << endl;

    }

1 Ответ

0 голосов
/ 25 января 2019

Буферы не бесконечны, а в случае не файловых потоков, вероятно, даже не настолько велики.

То, что вы не написали std::flush, не означает, что определенно не будет немедленным ответом потока. Если буфер заполнен, он все еще будет очищаться. Просто вы не выполняете ранний флеш.

Кроме того, вы можете предположительно увидеть std::cout, ведущий себя как std::cerr (который в основном отключает буферизацию) в режимах отладки. Я не знаю, делает ли это какая-либо реализация.

Мораль истории:

  • если вам нужен вывод немедленно, сбросьте;
  • если вам нужно позже, напишите позже;
  • если и только если вам все равно, делайте так, как вы это сделали.
...