2017-01-11 55 views
2

在寻找在C++文件读取的例子,我注意到,许多示例使用std :: ios ::二进制或std :: ifstream ::二进制和类似的?

  • std::ios::binary VS std::ifstream::binary
  • std::ios::beg VS your_file_stream.beg
  • std::ios::end VS your_file_stream.end

是否有这些任何差异例子,如果没有,为什么它们都包含在STL中?

+0

虽然这是一个很好的问题,但我认为这主要是基于意见的。它们是相同的,只是用不同的方式来引用它们。 –

+0

我的感觉是第一部分是基于意见的,但第二部分不是。 – Bathsheba

+0

我想你可能在你的问题上有一个错字。你真的问是否'std :: ios :: beg'和'std :: ios :: end'是一样的吗?你真的在问某件事的开始是否与某件事情的结局相同吗? –

回答

1

std::ios::binarystd::ifstream::binary在很大程度上取决于个人的选择,但我总是使用更“基本”的定义,只要你明白我的意思,它就是继承树。因此std::ios::binary是我的选择。

至于std::ios::begyour_file_stream.beg,我很喜欢前者:通过实例达到static成员毫无意义和模糊。

0

他们是相同的,因为从iosifstream继承...

没有 “成语” 出现。只是意见。

我个人的观点是,你保护你的代码的方式在它使用的库中的变化将保持你的代码一致性。

所以your_file_stream.end始终与your_file_stream相关,不管它是什么,但它是由现在和将来的版本组成。即使它碰巧与其他流类型不同,也会始终有效。

如果您没有实例,则std::ifstream::binary始终与ifstream一致,但现在和将来都会进行组合。即使它与其他类型不同,也会说出来。

如果你正在编写一个采用std::ios&的多态运行时函数,那么比std::ios::binary还好。

然而,这些事情不太可能会改变,所以......它并不重要。

相关问题