Вопреки ответу anon (28 апреля 2009 г.), это поведение не имеет ничего общего с операционной системой или «консольным программным обеспечением».
Потоки
C ++ <iostream>
предназначены для взаимодействия с потоками C <stdio.h>
. Цель состоит в том, чтобы разрешить использование std::cout
с использованием printf
/ puts
. Чтобы достичь этого, std::cout
streambuf
реализован поверх потока C stdout
. Это на самом деле C stdout
, который буферизуется в строке, когда стандартный вывод подключен к терминальному устройству.
Вы можете вызвать std::ios_base::sync_with_stdio(false)
(до того, как ваша программа использует какой-либо из стандартных потоков ввода / вывода C ++), чтобы указать библиотеке потоков C ++ напрямую связываться с базовыми файловыми дескрипторами, а не размещать поверх библиотеки потоков C , Это полностью исключает поток C stdout
и ускоряет потоки ввода-вывода C ++ за счет того, что две библиотеки перестали хорошо смешиваться.
В качестве альтернативы можно безоговорочно установить stdout
на полную буферизацию путем вызова std::setvbuf(stdout, nullptr, _IOFBF, BUFSIZ)
. Тогда, даже если std::cout
все еще пишет через stdout
, у вас не будет stdout
сбрасывания после каждой новой строки.