チュートリアルでは、cin と cout について次のように説明しています。
「ストリーム」とは何ですか?
「ストリーム」を物理的なホースまたはパイプと考えてください。一方の端から誰かが水を注ぐかもしれません。もう一方の端から出てきます。これは、ストリームへの「読み取り」と「書き込み」です。
ストリームは、データが移動する単なる場所です。これは、「ソケット ストリーム」(インターネット経由) または「ファイル ストリーム」(ファイルへの)、またはおそらく「メモリ ストリーム」であり、メモリ内の場所 (RAM) に書き込まれたデータです。
「ストリーム」は、データのソース、またはデータを書き込むことができる場所を表すオブジェクトです。
例としては、ファイル ハンドルやパイプなど、データを読み書きできるものがあります。
ストリームの重要な特性は、それらが共通のインターフェイスを共有することです。そのため、同じコードをファイルまたはパイプ (たとえば) に書き込むことができ、書き換える必要はありません。
ストリームは、基礎となるデータの「ソース」または「シンク」の抽象化と見なす必要があります。ソースはデータの読み取り元であり、シンクはデータの書き込み先です。
ストリームの概念により、さまざまな形式のメディア、ネットワーク接続、アプリケーション間のパイプ、ファイルなどで I/O を実行できます。
ストリームの抽象化は、入力と出力を簡素化し、これらのストリームのソースと宛先を調整して再接続する柔軟性を提供するため、開発者にとって非常に価値があります。
わかりやすい例えはホースです。ホースを介してデータを送受信でき、これらのホースをさまざまなものに接続できます。
プログラムがホースを介して通信できるようにすることで、あらゆる種類のプログラムが互いに通信できるようになり、相互運用性とユーティリティが大幅に向上します。
これは UNIX 哲学の核心であり、いくつかの非常に強力なプログラミング イディオムをサポートしています。