FILE vs fstream

Vin*_*t G 11 c++ file-io

可能重复:
std :: ifstream明显慢于FILE吗?
您在C++代码中使用哪个I/O库?

我想知道在C++中使用fstream而不是FILE有什么优缺点?

我认为一个专业人士认为FILE比fstream更有效.

asv*_*kau 38

一个是C,一个是C++.番茄,番茄.(当你把它写出来时,那个表达式几乎不起作用.)我的猜测是你不太可能看到性能差异.

一个非常C++倾向,反C的人可能会告诉你一些fstream能够更轻松地处理不同类型的东西.有了FILE你有两个选择-交易中的字节或买卖格式字符串.自从printffwrite等.不知道他们的论点的"真实"类型是什么,这使得它更容易搞砸.还有一个事实是C++类将有一个析构函数,因此当对象超出范围时,您可以"免费"清理.(虽然...你真的要像fflush在析构函数默默发生吗?也许不是).为了这些各种各样的论据我会说,这是不是真的沉重的负担使用FILE,但是,嘿,有些人感觉更强烈在这些事情上比我.

最终将归结到正是您的应用程序正在试图做的,它可能是FILE,fstream或两者能充分满足您的需求.

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

  • 最后一段+1.:) (6认同)

Jef*_*ust 14

  • fstream是一种更好的封装,具有更高级别的概念.
  • fstream是例外安全的.
  • fstream也是一个流,可以作为流一般地处理.

想像:

void read(istream&istr)

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


oct*_*al9 5

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

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

  • @asveikau - 我不反对。但是,应该将其作为 FILE 和 fstream 之间的区别加以注意,因此我将其包含在内。它是赞成还是反对完全是主观的。 (3认同)
  • 我认为“忘记关闭”的说法有点可疑。特别是这里的“忘记”这个词意味着这将使您不必思考。事实并非如此。例如,如果您有缓冲字节,关闭也可能有刷新,这可能会失败。您是否希望这种失败发生在可能不方便处理的析构函数中?或者您更愿意将它与其余 I/O 放在一个可预测的位置?文件是自动内存管理失效的一个很好的例子。关于带有 GC 的语言以及为什么不依赖 GC 来关闭文件,可能会有类似的争论。 (2认同)