ifstream и ofstream предназначены для ввода и вывода в файл, а fstream может выполнять задачи обоих, но не унаследован ни от одного из ifstream и ofstream, это повторение кода или что-то еще?
ifstream и ofstream предназначены для удобства, fstream - это то место, где выполняется настоящая работа.
@DimChtz Просто для любопытства ;-)





Вы должны спросить автора, Бьярна Страуструпа, для окончательного ответа. В своей оригинальной статье об iostreams, опубликованной в USENIX Proceedings за 1985 г., он, кажется, уделяет большое внимание эффективности:
Inline expanded functions are used for the basic operations (like "put a character into a buffer"), so the basic overhead tend to be one function call per simple object (integer, string, etc.) written (or read) plus one function call per buffer overflow.
Так что это могло быть причиной.
Я предполагаю, что вы мог извлекаете общие функции ввода-вывода файлов в миксин, но для этого потребуется наследование virtual, чтобы разрешить наследование ромба, что добавит дополнительную косвенность при доступе к базовому basic_filebuf.
Кроме того, поскольку режим чтения / записи файла обычно не может быть изменен после открытия файла, возможность преобразовать fstream в ifstream или ofstream создаст несоответствия, поскольку вы можете получить записываемый ifstream или читаемый ofstream.
Настоящий вопрос: зачем вам это вообще?