为什么fstream不是从c ++中的ifstream和ofstream继承而来的?

时间:2018-06-12 12:55:12

标签: c++ fstream iostream ofstream

ifstreamofstream用于输入和输出文件,fstream可以执行这两项任务,但不会从ifstream和{{1}继承这个代码是重复还是其他什么?

Hierarchy of fstream

1 个答案:

答案 0 :(得分:3)

你必须要求作者Bjarne Stroustrup作出明确答复。在1985年USENIX Proceedings上发表的关于iostreams的原始论文中,他似乎非常重视效率:

  

内联扩展函数用于基本操作(如“将字符放入缓冲区”),因此基本开销往往是每个简单对象(整数,字符串等)写入(或读取)的一个函数调用每个缓冲区溢出加一个函数调用。

所以这可能是原因。

我猜你可以将常见文件I / O功能提取到mixin中,但这需要virtual继承才能允许钻石继承,这会增加额外的间接性访问基础basic_filebuf

此外,由于文件读取/写入模式通常无法在文件打开后更改,因此能够将fstream投射到ifstreamofstream会产生不一致得到可写的ifstream或可读的ofstream