我是 C++ 初学者,刚刚完成 C++ Primer,我正在玩自己的几个项目。这样做时我注意到的一件事是,虽然 C++ Primer 倾向于强调std::fstream
文件 IO 的方式,但许多程序却使用FILE*
.
这有什么原因吗?如果有,在什么情况下你会/应该使用fstream
overFILE
或者是否有我不知道的第三个选项,你会推荐?
谢谢!
在 C++中使用 stdio(即FILE*
函数族)的唯一原因是为了与 C 代码进行接口以获取FILE*
参数。许多使用 stdio 学习 C 和/或 C++ 的人相信这些功能在某种程度上更胜一筹。主要的抱怨是使用 stdio 的格式说明符要短得多。不幸的是,它们也容易出错,尽管警告指出格式说明符和实际参数之间存在不一致,但我还没有看到一个使用标准输入输出的程序不平凡且正确。
IOstreams 中 stdio 做得更好的一个遗漏是scanf()
函数可以进行一些有趣的解析。这可以很容易地添加到 IOstreams 中,但它不是标准库的一部分(而且它不像格式说明符那样简洁)。
就个人而言,我认为与优点相比,缺点无关紧要:
由于一系列文章和早期 IO 流的一些极其糟糕的实现(其中一些似乎仍然存在于流行平台中),C++ 流已经获得了缓慢的错误声誉。是的,可以确保它们比 stdio 慢很多,但绝对有可能以与 stdio 相似的性能来实现它们。但是,用户需要避免一些简单的性能错误:
std::endl
. 时期。如果你真的想写一个换行符,然后是一个刷新,这样说:out << '\n' << std::flush
。这就是在绝大多数情况下使用std::endl
但不正确的方法,因为意外刷新会导致严重的性能问题。std::endl
std::sync_with_stdio(false);
除非您将输出混合到标准流对象(std::cin
等和stdin
等),否则调用。尽管只有标准流对象才需要该效果,但 IO 流的不良实现也会影响文件流。