Бьерн Страуструп - Язык программирования С++. Главы 8-10 - Связывание потоков

ОГЛАВЛЕНИЕ


10.4.1.1 Связывание потоков

Функция tie() может установить и разорвать связь между ostream и
istream. Рассмотрим пример:
       main()
       {
         String s;
         cout << "Password: ";
         cin >> s;
         // ...
        }
Как можно гарантировать, что приглашение Password: появится на экране прежде, чем выполниться операция чтения? Вывод в cout и ввод из cin буферизуются, причем независимо, поэтому Password: появится только по завершении программы, когда закроется буфер вывода.

Решение состоит в том, чтобы связать cout и cin с помощью операции cin.tie(cout). Если ostream связан с потоком istream, то буфер вывода выдается при каждой операции ввода над istream. Тогда операции

        cout << "Password: ";
        cin >> s;
эквивалентны
        cout << "Password: ";
        cout.flush();
        cin >> s;
Обращение is.tie(0) разрывает связь между потоком is и потоком, с которым он был связан, если такой был. Подобно другим потоковым функциям, устанавливающим определенное значение, tie(s) возвращает предыдущее значение, т.е. значение связанного потока перед обращением или 0. Вызов без параметра tie() возвращает текущее значение.