Почему fstream не наследуется от ifstream и ofstream в c ++? - PullRequest
0 голосов
/ 12 июня 2018

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

Hierarchy of fstream

1 Ответ

0 голосов
/ 16 июня 2018

Вы должны попросить автора Бьярна Страуструпа дать окончательный ответ.В своей оригинальной статье о iostreams, опубликованной в USENIX Proceedings 1985 года, он, кажется, уделяет большое внимание эффективности:

Встроенные расширенные функции используются для основных операций (например, «поместить символ вbuffer "), поэтому основные накладные расходы, как правило, составляют один вызов функции на простой записанный (или читаемый) объект (целое число, строку и т. д.) плюс один вызов функции на переполнение буфера.

Так что это можетбыть причиной.

Полагаю, вы могли бы извлечь общие функции файлового ввода-вывода в миксин, но для этого потребовалось бы наследование virtual, чтобы учесть наследование алмазов, чтодобавьте дополнительную косвенность при доступе к базовому basic_filebuf.

. Кроме того, режим чтения / записи файла обычно не может быть изменен после открытия файла, с возможностью приведения fstream к ifstream илиofstream приведет к несоответствиям, поскольку вы можете получить доступный для записи ifstream или читаемый ofstream.

...