【问题标题】:FILE vs fstream [duplicate]文件与 fstream [重复]
【发布时间】:2011-07-31 00:47:29
【问题描述】:

可能的重复:
Is std::ifstream significantly slower than FILE?
Which I/O library do you use in your C++ code?

我想知道在 C++ 中使用 fstream over FILE 有什么优点或缺点?

我认为 FILE 比 fstream 更高效。

【问题讨论】:

  • 这个问题的标题使它成为该问题的典型问题,特别是考虑到有一个很好的公认答案。我认为这个问题可以具体解释为具有特定答案的技术问题(以及关于选择图书馆的建议的更一般的问题,这似乎是导致问题被关闭的解释,因为显示为重复的两个问题) - 所以我投票决定重新提出问题。

标签: c++ file-io


【解决方案1】:

一个是C,一个是C++。番茄,番茄。 (当你把它写出来时,这个表达式几乎没有效果。)我的猜测是你不太可能看到性能差异。

一个非常 C++ 倾向、反 C 的人可能会告诉你一些类似fstream 能够更轻松地处理不同类型的东西。使用FILE,您有两个选择——处理字节或处理格式字符串。由于printf 或fwrite 等。不知道他们论点的“真实”类型是什么,这更容易搞砸。还有一个事实是 C++ 类将有一个析构函数,因此当对象超出范围时,您可以“免费”进行清理。 (虽然......你真的希望像fflush 这样的事情在析构函数中静默发生吗?可能不会。)对于这些类型的论点,我会说它并不是真的那么使用FILE,但是,嘿,有些人在这些问题上的感觉比我更强烈。

最终它会归结为您的应用程序正在尝试做什么,可能是FILE、fstream 或两者都可以充分满足您的需求。

选择有效的方法,灵活应对其他人的选择,理解论点,不要过于虔诚。这是我的建议。 :-)

【讨论】:

  • +1 表示最后一段。 :)
【解决方案2】:
  • fstream 是更好的封装,具有更高级别的概念。
  • fstream 是异常安全的。
  • fstream 也是一个流,一般可以视为一个流。

想象一下:

空读(istream&istr)

我们可以传入 ifstream、istrstream 甚至 cin。这对于单元测试非常有用。

【讨论】:

    【解决方案3】:

    std::fstream 是类型安全的,具有国际化支持并且(警告:意见)更易于使用。

    当std::fstream 超出范围时,无论您是否忘记fstream::close(),它都会为您销毁。

    【讨论】:

    • 我认为“忘记关闭”的说法有点可疑。尤其是这里的“忘记”一词意味着这将使您不必思考。事实并非如此。例如,如果您有缓冲字节,则关闭也可能有刷新,这可能会失败。您是否希望此故障发生在可能不方便处理的析构函数中?还是您希望它与您的其他 I/O 一起位于可预测的位置?文件是自动内存管理失效的一个很好的例子。关于带有 GC 的语言以及为什么不依赖 GC 来关闭文件,也有类似的争论。
    • @asveikau - 我不反对。但是,应该注意它是 FILE 和 fstream 之间的区别,因此我将其包括在内。它是赞成还是反对完全是主观的。
    猜你喜欢
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多