我是C ++初学者,刚刚完成了C ++ Primer,我正在玩一些自己的项目。我注意到的一点是,虽然C ++ Primer倾向于强调std::fstream
作为文件IO的方法,但许多程序使用FILE*
。
这有什么理由吗?如果有的话,在什么情况下/ fstream
会使用FILE
还是{3}}或者我建议您不知道第3个选项?
谢谢!
答案 0 :(得分:2)
在C ++中使用stdio(即FILE*
函数族)的唯一原因是使用FILE*
参数与C代码进行交互。许多使用stdio学习C和/或C ++的人都相信这些功能在某种程度上更优越。主要的抱怨是使用stdio的格式说明符要短得多。不幸的是,它们也容易出错,尽管警告指出格式说明符和实际参数之间存在不一致,但我还没有看到一个程序使用stdio非正常且正确。
在IOstreams中,stdio做得更好的一个遗漏是scanf()
函数可以做一些有趣的解析。这可以很容易地添加到IOstreams,但它不是标准库的一部分(并且它不像格式说明符那样简洁)。
就个人而言,我认为与优势相比,这些缺点无关紧要:
由于早期IOstream的一系列文章和一些非常糟糕的实现(其中一些似乎仍然停留在流行的平台中),C ++流已经获得了一个不正确的声誉。是的,可以确保它们比stdio慢得多,但绝对有可能以与stdio类似的性能实现它们。但是,用户需要避免一些容易出现的性能错误:
std::endl
。期。如果你真的打算写一个换行符,然后写一个同花顺说:out << '\n' << std::flush
。这就是std::endl
所做的事情,但std::endl
在大多数案例中被错误地使用,意外的同花顺导致了重大的性能问题。std::sync_with_stdio(false);
等,并std::cin
,否则请调用stdin
等等)。虽然只有标准流对象才需要这种效果,但IOstream的实现也很糟糕,这也会影响文件流。