C/C++

Что делает flush код ниже? Он никак не влияет на перенос курсора на новую строку, тоже самое можно сделать с endl.

В многопоточном приложении, когда требуется вывод промежуточных результатов std::flush отрывает текущий кусок буфера и принудительно выводит его на экран консоли. В противном случае поток будет накапливать информацию в буфер и выведет её в консоль только после своего завершения. Такое поведение связано с тем, что объект std::cout возвращает себя по ссылке после каждого вызова. Например, если вы напишете в коде std::cout << a << b << c << '\n'; то объект std::cout будет вызван четыре раза: для a, b, c и символа конца строки. Если в потоке этот код вызвать десять раз, то он накопит 40 вызовов и по завершении выведет всё сразу без std::flush или 10 раз выведет данные с ним. Теперь понятно?
ДН
Дмитрий Нифантов
63 313
Лучший ответ
Олег Луценко То есть flush не нужен?
В данном конкретном случае flush совершенно не нужен.

flush производит принудительный вывод содержимого буфера.

endl выводит '\n' и выполняет flush. Так что при использовании endl отдельный flush не требуется.

При выводе данные сначала накапливаются в буфере в оперативной памяти. И только когда буфер заполняется, производится реальный вывод данных - совсем не в тот момент, когда был выполнен cout <<. И возможна ситуация, когда программа запрашивает ввод, а поясняющего текста на экране нет - т. к. он ещё в буфере.

Вот для исключения подобного и используют flush, который производит немедленный вывод содержимого буфера - независимо от его заполненности.
Олег Луценко А не проще-ли использовать "\n" вместо endl и flush
очищает буфер cout
Ramin Sharafidinov
Ramin Sharafidinov
52 551
Олег Луценко а зачем это надо?) не совсем понимаю)
Олег Луценко новичок просто, и нигде никто не говорит и пытаюсь разобраться)