文件IO:c(FILE *)和fgets()与c ++ istream和read();功效?效率?

时间:2012-01-25 17:12:00

标签: c++ c file optimization io

关于使用c样式文件IO(例如使用FILE *,函数如fgets()等)或c ++样式(例如istreams或ifstreams和函数,如read()或get),存在无数问题( )等)。我一直无法找到比较不同功能的两种方法的主题。

是什么时候比另一个更好
  1. 便利?
  2. 效率?
  3. 功效?
  4. 我通常用c ++编程,但仍然使用FILE *来表示我的所有IO,而且我使用(f)printf而不是cout等等。我认为这只是习惯。有没有人有明确的理由选择一个而不是另一个?或者当一个或另一个最佳时的情况?

2 个答案:

答案 0 :(得分:1)

如果我想格式化某些内容,我发现printfcout更容易使用,写法更紧凑。所以我通常不会打扰cout

ifstreamsofstreams并不是那么糟糕。

然而,这也是我害怕的习惯问题。我认为没有真正的答案。

答案 1 :(得分:0)

在实践中,问题在你达到这三个问题之前就已经解决了 的问题。您需要过滤输出或输出到某些设备 这是不受支持的,因此您将使用某种自定义 streambuf。而且你会想要输出你自己的类型,而不仅仅是 编译器提供的,所以你将使用很多自定义 operator<<。当然,您需要集中管理特定的 根据值的逻辑含义格式化:您不想要 说“以固定格式格式化此值,后面有三位数 小数“,但”将此值格式化为利率(或 无论如何“,”格式化利率的规范 在源代码中的单个位置给出(不在每个printf中)。和 当然,您希望能够改变利率类型 从doubleBigDecimal,无需梳理所有内容 代码试图修复printf。 (就此而言,你如何修改 printf输出BigDecimal?)

坦率地说,iostream可能更方便(虽然不是 太糟糕了),它通常不如FILE*那么有效。但既然如此 实际上没有用,这些问题变得无关紧要。