one を使用 すると、とstd::fstream
の両方の型のオブジェクトを宣言できます。唯一の違いは、 , をパラメータとして提供する必要があることです。これは、他の 2 つには常に必要とは限りません。ifstream
ofstream
fstream
in
out
app
コーディングの利便性だけifstream,ofstream
で達成できないことについて何か特別なことはありますか?fstream
const
とにかく変数から読み書きできるのに、なぜ私たちが欲しいのかと尋ねるようなものです。これにより、バグを減らすための非常に貴重な機能であるコンパイル時のチェックが可能になります。また、コンストラクター呼び出しなしで宣言を見ると、それが入力、出力、またはその両方であるかどうかを確認できるため、より自己文書化されています。言及したパラメーターは、多くの場合、実装ファイルでしか見られず、手元にない場合があります。また、ストリームの種類ごとに、必要なデータ メンバーにいくつかの違いがある場合があります。実際のニーズに一致する最小限の機能のクラスを使用すると、メモリを節約したり、他の変数の初期化やチェックに時間を費やしたりする可能性があります。
どちらかといえばfstream
、便利なものです。特に、あなたが持っているものは基本的に次のとおりです。
namespace std {
class ifstream { /* ... */ };
class ofstream { /* ... */ };
class fstream : public ifstream, public ofstream { /* ... */ };
}
[明らかに、多くの無関係な詳細をスキップしています]。
つまり、 はとの両方から派生することにより、 のすべてfstream
の入力機能ifstream
と のすべての出力機能を提供します。とがなければ、 は(少なくとも現在の形に似たものでは) まったく存在できませんでした。ofstream
ifstream
ofstream
ifstream
ofstream
fstream
全体のポイントは、一般的であることです。ファイルの読み取りのみが必要な場合は、パラメーターとして ifstream を使用できます。その後、書き込み可能でなくても、読み取りをサポートするものを渡すことができます。およびその逆。