web-dev-qa-db-ja.com

inおよびoutを使用するifstreamおよびofstreamまたはfstream

ファイルを扱う場合、以下の2つの例のどちらが好ましいですか?一方が他方よりも優れたパフォーマンスを提供しますか?何か違いはありますか?

ifstream input("input_file.txt");
ofstream output("output_file.txt");

vs

fstream input("input_file.txt",istream::in);
fstream output("output_file.txt",ostream::out);
10
Ishaan

パフォーマンスに関しては、この場合、おそらくごくわずかな違いしかありません。せいぜい、あなたは少しのメモリを節約しています。

重要なのは、最初のケースがセマンティクスに役立つということです。std::fstreamは、入力、出力、またはその両方で開くことができます。このため、std::ifstreamおよびstd::ofstreamを使用している間は、宣言をチェックして、何をしているかを明確にする必要があります。 2番目のケースには、ヒューマンエラーの余地があります。そのため、回避する必要があります。

私自身の経験則では、ファイルへの読み取りアクセスと書き込みアクセスの両方が必要な場合にのみ、std::fstreamを使用します。

18
meneldal

別の動作が必要な場合を除いて、より簡潔なフォームを使用してください...それ以外の場合は、エラーが増える余地を作るだけです。 FWIW、可能であれば、ストリームのスコープを設定し、オープンが次のように機能することを確認します。

if (std::ifstream input{"input_file.txt"})
    ...use input...
else
    ...log and/or throw...
0
Tony Delroy