Ответы пользователя по тегу Стандартные потоки
  • Что такое буфер ввода/вывода?

    Для ввода-вывода в консоль или файл программа делает системные вызовы чтения или записи. Не вдаваясь в подробности, скажу, что они дорогие. Если ты читаешь по одному символу из std::cin, то это будет работать жутко медленно.

    Что происходит на практике: происходит один системный вызов, cin читает в свой внутренний буфер сразу, скажем, 4096 байт, и потом отдаёт тебе из буфера по одному символу, которые ты у него запрашиваешь. Нетрудно заметить, что работать это будет (в моём примере) где-то в 4096 раз быстрее.

    Зачем очищать. Пока ты не сделал flush, то, что ты вывел в поток, находится в буфере. cout ждёт, пока ты докинешь ему ещё байтиков, чтобы вывести всё потом большим куском. Если же ты хочешь, чтобы вывод произошёл прямо сейчас, то нужен flush.
    Ответ написан
    Комментировать