【问题标题】:Why fstream is not inherited from ifstream and ofstream in c++?为什么 fstream 不是从 c++ 中的 ifstream 和 ofstream 继承的?
【发布时间】:2018-11-21 21:18:26
【问题描述】:

ifstreamofstream 用于文件中的输入和输出,fstream 可以完成它们的任务,但不能从ifstreamofstream 中的任何一个继承,这是代码重复还是其他?

【问题讨论】:

  • 真正的问题是:你为什么还要关心?
  • ifstreamofstream 是为了方便,fstream 是真正的工作完成的地方。
  • @DimChtz 只是为了好奇 ;-)

标签: c++ fstream iostream ofstream


【解决方案1】:

您必须向作者 Bjarne Stroustrup 询问明确的答案。在 1985 年 USENIX Proceedings 上发表的关于 iostreams 的原始论文中,他似乎非常强调效率:

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

所以这可能是原因。

我猜你可以将通用文件 I/O 功能提取到 mixin 中,但这需要virtual 继承才能允许菱形继承,这会在访问时增加额外的间接性底层basic_filebuf

此外,由于文件读/写模式通常在打开文件后无法更改,因此能够将fstream 转换为ifstreamofstream 会产生不一致,因为您可以获得可写的ifstream或可读的ofstream

【讨论】:

    猜你喜欢
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多