Эффекты буферизации

В следующем примере демонстрируются эффекты буферизации. Вы могли ожидать, что программа выведет please wait, подождет 5 секунд и затем продолжит выполнение. Однако такое поведение необязательно, так как выходные данные помещаются в буфер.

// effects_buffering.cpp
// compile with: /EHsc
#include <iostream>
#include <time.h>
using namespace std;

int main( )
{
   time_t tm = time( NULL ) + 5;
   cout << "Please wait...";
   while ( time( NULL ) < tm )
      ;
   cout << "\nAll done" << endl;
}

Чтобы программа работала логично, объект cout должен опустошать себя перед выводом сообщения. Чтобы сохранить объект ostream , отправьте ему манипулятор flush :

cout <<"Please wait..." <<flush;

Это действие сохраняет буфер, гарантируя вывод сообщения до ожидания. Можно также использовать endl манипулятор, который очищает буфер и выводит канал возвращаемой строки каретки или можно использовать cin объект. Этот объект (с объектами cerr или clog ) обычно привязывается к объекту cout . Таким образом, любое использование cin (или объектов cerr или clog ) сохраняет объект cout .

См. также

Потоки вывода