2017-01-11 56 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還好。

然而,這些事情不太可能會改變,所以......它並不重要。

相關問題