## 7.2 入出力演算子

ここでは、組み込みストリームに対する簡単な入出力を紹介します。入出力ストリーム機能では、書式設定ストリームの入出力のためにシフト演算子を定義します。出力演算子はシフト演算子 `operator<<()` であり、挿入子とも呼びます。

>     cout << "result: " << x << '\n';

入力は別のシフト演算子 `operator>>()` で行います。この演算子は、抽出子とも呼びます。

>     cin >> x >> y;

いずれの演算子も、標準 C++ ライブラリに定義された一部の型と同様に、C++ に組み込まれたすべての型にオーバーロードされます。たとえば、`bool`、`char`、`int`、`long`、`float`、`double`、`string` などの挿入子と抽出子があります。ストリームに対して値の挿入や抽出を行うと、値の型に基づいて、C++ 関数 overload resolution によって正しい抽出演算子が選択されます。これが、C++ 入出力ストリーム型が C stdio より安全で優れている点です (第 6 章参照)。

次の例のように、1 つの式に複数の単位を出力することができます。

>     cout << "result: " << x;

これは、次の式と等価です。

>     (cout.operator<<("result: ")).operator<<(x);

その理由は、シフト演算子ごとに各ストリームの参照が返るからです。組み込み型のほとんどすべてのシフト演算子は、各ストリームクラスのメンバー関数です。2 その定義は、次のパターンに従って行われます。

>     template<class charT, class traits>
>     basic_istream<charT, traits>&
>     basic_istream<charT, traits>::operator>>(type& x)
>     {
>       // x を読み取る
>       return *this;
>     }

そして

>     template<class charT, class traits>
>     basic_ostream<charT, traits>&
>     basic_ostream<charT, traits>::operator<<(type x)
>     {
>       // x を書き込む
>       return *this;
>     }

どのような状況にも十分ということはありませんが、このような単純な単位の入出力は、場合によっては便利です。たとえば、出力の書式設定や、入力の構文解析の方法をさまざまに変更することができます。入出力ストリームでは、その入出力演算子の書式設定機能を、さまざまな方法で制御することができます。入出力ストリームには、次の設定を行うことができます。

- 出力フィールドの幅と、このフィールド内の出力の調整。
- 浮動小数点数の精度と書式。小数点を常に組み込むかどうかの設定。
- 入力ストリームからの読み取りで空白をスキップするかどうかの設定。
- 整数値を 10 進数、8　進数、16 進数の書式で表示するかどうかの設定。

その他さまざまな書式設定オプション。

書式設定の制御をする機構は次の 2 つです。

- ストリームの書式状態による書式設定の制御
- ストリームのロケールによる地域対応化

書式の制御は、主にストリームの書式状態で行います。次の節で例を示します。

Copyright (c) 1998, Rogue Wave Software, Inc.
このマニュアルに関する誤りのご指摘やご質問は、電子メールにてお送りください。

OEM リリース, 1998 年 6 月