C++ での Iostream の定義
このガイドでは、C++ で基本的な入出力ライブラリを利用する方法について説明します。
<iostream>
ヘッダーを利用して、グローバルストリームオブジェクトを C++ に含める
入出力ライブラリは、ほとんどすべての実際のプログラムで使用される C++ STL のコア部分です。C++ I / O 操作は、ストリームの形式で抽象化されます。これは、一般的なデータシーケンスと考えることができます。ストリームの抽象化は、多重継承されたクラスを使用して実装され、特定の I / O 操作に特化した異なる名前のオブジェクトとしてユーザーに公開されます。ストリームベースの I / O ライブラリ全体を使用して、テキストをコンソールに出力したり、ディスク上のファイルからデータを読み書きしたりできることに注意してください。ストリームライブラリは、C++ プログラムがファイルシステムやデバイスと対話するための主要な手段と考えることができます。
2つの重要なストリームクラスは、データの読み取りと書き込みに使用されるストリームに対応する istream
と ostream
です。これらのクラスは、文字ストリームに対する操作を提供します。プログラムがユーザー入力の取得やエラーメッセージの出力などの操作を実行するために頻繁に使用する 4つのグローバルストリームオブジェクトがあります。これらのオブジェクトは次のとおりです。
cout
:C のstdout
に対応する標準出力ストリームを表します。cin
:これは標準入力ストリームです(stdin
に対応します)。cerr
:これは、バッファなしストリームとして実装された標準エラーストリームです(stderr
に対応します)。clog
:C に相当するものがない標準のロギングストリームであり、cerr
のバッファバージョンを提供します。
I / O ストリームライブラリのもう 1つの重要な部分は、異なるオブジェクト間で操作をチェーンするために使用される演算子です。ストリーム挿入演算子と呼ばれる <<
演算子は、データをストリームオブジェクトにプッシュします。一方、>>
演算子はストリームエクストラクタとして知られています。これらの演算子は通常、算術型に対してシフト演算を実行しますが、この場合はオーバーロードされた演算子として実装されることに注意してください。
次の例では、C++ ストリームベースの I / O クラスの基本的な使用法を示します。cout
オブジェクトを使用して、string
の内容をコンソールに出力します。cout
は標準出力ストリームに対応しているため、挿入演算子を使用してデータをプッシュし、通常はコンソールに出力されます。endl
オブジェクトは、改行文字を出力して出力バッファをフラッシュするマニピュレータと呼ばれることに注意してください。
ストリームマニピュレータにはさまざまなタイプがあり、endl
のように入出力を変更するものと、ストリームオブジェクトに入出力を異なる方法で解釈させるものがあります。後者には、dec
、hex
、oct
などの基数マニピュレータが含まれます。
#include <iostream>
#include <string>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
int main() {
string str1("what does iostream mean?");
cout << str1 << endl;
cout << str1 << " - " << str1 << endl;
return EXIT_SUCCESS;
}
出力:
what does iostream mean?
what does iostream mean? - what does iostream mean?
前のプログラムで示したように、ストリーム演算子とオブジェクトの最も強力な機能は、複数回連続してチェーンされることです。この場合、リテラル値を他の変数と組み合わせて、それらすべてを cout
ストリームにプッシュできることがわかります。次に、cin
オブジェクトと cerr
オブジェクトを使用して、ユーザー入力を読み取り、読み取ったデータを出力します。
読み取る必要のある型のオブジェクトは、浮動小数点数 x
として事前に宣言する必要があることに注意してください。挿入/抽出演算子のもう 1つの便利なプロパティは、操作が失敗した場合にゼロ以外の値を返すことです。または、メンバー関数 fail
および bad
を使用して、特定のストリームオブジェクトで特定のエラーが発生したかどうかを確認できます。
#include <iostream>
#include <string>
using std::cerr;
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
float x;
cout << "enter float: ";
if (!(cin >> x)) {
cerr << "error while reading the floating point value!" << endl;
return EXIT_FAILURE;
}
cout << x;
return EXIT_SUCCESS;
}
出力:
error while reading the floating point value!