JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.3: C++ ユーザーズガイド     Oracle Solaris Studio 12.3 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

パート I C++ コンパイラ

1.  C++ コンパイラの紹介

2.  C++ コンパイラの使用方法

3.  C++ コンパイラオプションの使い方

パート II C++ プログラムの作成

4.  言語拡張

5.  プログラムの編成

6.  テンプレートの作成と使用

7.  テンプレートのコンパイル

8.  例外処理

9.  プログラムパフォーマンスの改善

10.  マルチスレッドプログラムの構築

パート III ライブラリ

11.  ライブラリの使用

12.  C++ 標準ライブラリの使用

13.  従来の iostream ライブラリの使用

13.1 定義済みの iostream

13.2 iostream 操作の基本構造

13.3 従来の iostream ライブラリの使用

13.3.1 iostream を使用した出力

13.3.1.1 ユーザー定義の挿入演算子

13.3.1.2 出力エラーの処理

13.3.1.3 出力のフラッシュ

13.3.1.4 バイナリ出力

13.3.2 iostream を使用した入力

13.3.3 ユーザー定義の抽出演算子

13.3.4 char* の抽出子

13.3.5 1 文字の読み込み

13.3.6 バイナリ入力

13.3.7 入力データの先読み

13.3.8 空白の抽出

13.3.9 入力エラーの処理

13.3.10 iostreamstdio の併用

13.4 iostream の作成

13.4.1 クラス fstream を使用したファイル操作

13.4.1.1 オープンモード

13.4.1.2 ファイルを指定しない fstream の宣言

13.4.1.3 ファイルのオープンとクローズ

13.4.1.4 ファイル記述子を使用したファイルのオープン

13.4.1.5 ファイル内の位置の再設定

13.5 iostream の代入

13.6 フォーマットの制御

13.7 マニピュレータ

13.7.1 引数なしのマニピュレータの使用法

13.7.2 引数付きのマニピュレータ

13.8 strstream: 配列用の iostream

13.9 stdiobuf: stdio ファイル用の iostream

13.10 streambuf ストリームの操作

13.10.1 streambuf ポインタ型

13.10.2 streambuf オブジェクトの使用

13.11 iostream に関するマニュアルページ

13.12 iostream の用語

14.  ライブラリの構築

パート IV 付録

A.  C++ コンパイラオプション

B.  プラグマ

用語集

索引

13.10 streambuf ストリームの操作

入力や出力のシステムは、フォーマットを行う iostream と、システムのほかの部分は streambuf ストリームからなります。これはフォーマットなしの文字ストリームの入力または出力で動作します。

streambuf ストリームは通常、iostream 経由で使用するため、詳細に知っておく必要はありません。 streambuf ストリームを直接使用するように選択できます。たとえば、効率を高める場合や、iostream に組み込まれたエラー処理または整形を回避することが必要な場合があります。

13.10.1 streambuf ポインタ型

streambuf は文字シーケンス (文字ストリーム) と、シーケンス内を指す 1 つまたは 2 つのポインタとで構成されています。各ポインタは文字と文字の間を指しています。(ポインタは実際には文字と文字の間を指しているわけではありませんが、このように考えると理解しやすくなります。)streambuf ポインタには次の種類があります。

streambuf は、このどちらかのポインタ、または両方のポインタを持ちます。

ポインタ位置の操作とシーケンスの内容の操作にはさまざまな方法があります。操作時に両方のポインタが移動するかどうかは、使用される streambuf の種類によって違います。一般的に、キュー形式の streambuf ストリームの場合、get ポインタと put ポインタは別々に移動します。ファイル形式の streambuf ストリームの場合、get ポインタと put ポインタは同時に移動します。キュー形式ストリームの例としては strstream があり、ファイル形式ストリームの例としては fstream があります。

13.10.2 streambuf オブジェクトの使用

ユーザーは streambuf オブジェクト自体を作成することはなく、streambuf クラスから派生したクラスのオブジェクトを作成します。例としては、filebufstrstreambuf があります。これらについては filebuf(3CC4) と ssbuf(3) のマニュアルページを参照してください。より高度な使い方として、独自のクラスを streambuf から派生させて特殊デバイスのインタフェースを提供したり、基本的なバッファリング以外のバッファリングを行なったりすることができます。sbufpub(3CC4) と sbufprot のマニュアルページ (3CC4) では、これを行う方法について説明します。

独自の特殊な streambuf を作成する以外にも、マニュアルページで説明しているように、iostream と結合した streambuf にアクセスして公開メンバー関数にアクセスする場合があります。また、各 iostream には、streambuf へのポインタを引数とする定義済みの挿入子と抽出子があります。streambuf を挿入したり抽出したりすると、ストリーム全体がコピーされます。

次の例では、以前説明したファイルコピーを実行する別の方法を示しています。簡潔にするためにエラーチェックは省略されています。

ifstream fromFile("thisFile");
ofstream toFile ("thatFile");
toFile << fromFile.rdbuf();

入力ファイルと出力ファイルは、前と同じようにオープンします。各 iostream クラスにはメンバー関数 rdbuf があり、それに結合した streambuf オブジェクトへのポインタを返します。fstream の場合、streambuf オブジェクトは filebuf 型です。fromFile に結合したファイル全体が toFile に結合したファイルにコピー (挿入) されます。最後の行は次のように書くこともできます。

fromFile >> toFile.rdbuf();

前述の書き方では、ソースファイルが抽出されて目的のところに入ります。どちらの書き方をしても、結果はまったく同じになります。