@Csklassami std::flush очищает внутренний буфер стандартной библиотеки. То есть обычно при записи в поток данные не сразу передаются ОС, но накапливаются в буфере и отправляются разом.
Каждое опустошение буфера влечёт за собой системный вызов write(), а системные вызовы замедляют работу программы, поскольку процесс вынужден ожидать ядро ОС.
Размер буфера определяется реализацией, у меня BUFSIZ равен 8192, поэтому предположим, что размер буфера равен 8КБ.
Если программа выводит 64 строки длины ≤128 в поток, и в конце каждой ставит std::endl, то write() будет вызван 64 раза.
Если теперь все ендлы заменить на '\n', то поскольку все строки помещаются в буфер (128⋅64=8192), write() будет вызван только один раз.
Это, должно быть, очень грубый пример, но смысл таков.
Если поток открыт в текстовом режиме, то '\n' так же преобразуется в то, во что нужно (можете проверить сами).
Единственная разница — это отсутствие неявного вызова std::flush.
Кстати, это очень частый предмет непонимания среди начинающих разработчиков, они любят пихать везде и всюду std::endl, тогда как это может быть причиной потери производительности (сам сталкивался при написании одного алгоритма).
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.