На этом шаге мы перечислим особенности использования потоковых классов в библиотеке STL.
Классы ввода-вывода являются важнейшими классами стандартной библиотеки C++, - программа, которая не
вводит и не выводит данные, вряд ли принесет много пользы. Более того, классы ввода-вывода стандартной
библиотеки C++ не ограничиваются операциями с файлами, экраном и клавиатурой. Они создают
расширяемую архитектуру для форматирования произвольных данных и работы с произвольными "внешними представлениями".
Библиотека IOStream (как называется совокупность классов ввода-вывода) - единственная часть стандартной
библиотеки C++, которая широко использовалась до стандартизации C++. В ранние поставки систем C++
включались классы, разработанные в AT&T и ставшие фактическим стандартом ввода-вывода. Хотя в дальнейшем
эти классы адаптировались для интеграции со стандартной библиотекой C++ н выполнения некоторых новых
функций, базовые принципы, заложенные в классы библиотеки IOStream, остались неизменными.
Мы начинем с общего обзора важнейших компонентов и принципов потокового ввода-вывода, после чего подробно
рассматрим возможности практического применения библиотеки IOStream - от простого форматирования до
интеграции с новыми внешними представлениями.
За дополнительной информацией обращайтесь к книгам, посвященным потоковому вводу-выводу, или справочникам по
стандартной библиотеке C++.
Для тех, кто знакомым со "старой" библиотекой IOStream, перечислим изменения, внесенные в процессе
стандартизации. Хотя основные принципы потоковых классов ввода-вывода остались неизменными, были добавлены
некоторые важные новшества, расширяющие возможности настройки и адаптации.
- Была проделана работа по интернационализации ввода-вывода.
- Потоковые классы для символьных массивов типа char* были заменены классами, использующими
строковые типы стандартной библиотеки C++. Старые классы по-прежнему поддерживаются для обеспечения совместимости, но они считаются устаревшими. - Обработка ошибок была интегрирована с обработкой исключений.
- Библиотечные классы IOStream с поддержкой присваивания (имена таких классов заканчиваются суффиксом _withassign)
были заменены новыми средствами, доступными для всех потоковых классов. - Классы библиотеки IOStream преобразованы в шаблоны, что позволяет поддерживать разные
представления символов. Однако в результате возникает побочный эффект - нельзя использовать простые опережающие
объявления потоковых классов:class ostream; // Ошибка
Соответствующие объявления были собраны в специальном заголовочном файле, поэтому вместо них следует
использовать новый заголовок:#include <iosfwd> // OK
- Все символические имена библиотеки IOStream, как и в остальных компонентах стандартной библиотеки
C++, объявляются в пространстве имен std.
Со следующего шага мы приведем общие сведения о потоках ввода-вывода.