你必须向作者 Bjarne Stroustrup 询问明确的答案。在 1985 年 USENIX Proceedings 上发表的关于 iostreams 的原始论文中,他似乎非常强调效率:
内联扩展函数用于基本操作(例如“将一个字符放入缓冲区”),因此基本开销往往是写入(或读取)每个简单对象(整数、字符串等)的一个函数调用加上一个函数每次缓冲区溢出调用。
所以这可能就是原因。
我猜你可以将通用文件 I/O 功能提取到 mixin 中,但这需要virtual继承才能允许钻石继承,这会在访问底层basic_filebuf.
此外,由于文件读/写模式通常在文件打开后无法更改,因此能够转换fstream为ifstream或ofstream会产生不一致,因为您可以获得可写ifstream或可读的ofstream.