C ++ IOStreams являются смехотворно неэффективными (в большинстве реализаций, о которых я знаю). Часто это не проблема, но , когда , библиотека в основном бесполезна. Также хорошо, что синтаксис не интуитивен (и очень, очень многословен). Библиотека сложна и излишне сложна в расширении. Это тоже не очень гибко. По сравнению с чем-то вроде STL, IOStreams действительно выглядит как плохой сон. Но это здесь, и мы застряли с этим.
Причина, по которой он здесь, и причина, по которой он выглядит так, заключается в том, что он был разработан ранее, до того, как C ++ был зрелым языком. До того, как у нас был десятилетний опыт, мы говорили, что такое хороший дизайн библиотеки, а какой нет. Прежде, чем кто-либо действительно знал, какие были варианты.
C ++ нуждалась в библиотеке ввода / вывода, которая была бы лучше , чем C. И в некоторых важных аспектах C ++ IOStreams лучше . Они безопасны и расширяемы, как уже упоминали другие. Реализуя единственный оператор, я могу распечатать определенный пользователем класс. Это не может быть сделано с printf
. Мне также не нужно беспокоиться о неправильных спецификаторах формата и распечатке мусора из-за отсутствия безопасности типов.
Эти вещи необходимо исправить. И эй, в первые дни виртуальные функции и перегрузка операторов были дерьмом . Это выглядело круто. Конечно, библиотеки хотели использовать эти функции.
Библиотека IOStreams является компромиссом между:
- что-то более безопасное и расширяемое, чем C
stdio.h
- что-то эффективное
- что-то хорошо продуманное и интуитивно понятное
- библиотека, которая на самом деле существовала во время стандартизации C ++. (они должны были добавить что-то , поэтому им пришлось выбирать между кандидатами, которые действительно существовали в то время.)
Библиотека не достигает всего этого, и я считаю, что сегодня, имея многолетний опыт работы с языком, мы могли бы создать гораздо лучшую библиотеку. Но в середине 90-х, когда они искали библиотеку ввода-вывода для добавления, это было лучшее, что они могли найти.