ios_base クラス

このクラスは、テンプレート パラメーターに依存しない入力ストリームと出力ストリームの両方に共通するストレージ関数とメンバー関数を記述します。 (クラス テンプレート basic_ios は、テンプレート パラメーターに依存する、共通の要素を記述します。)

ios_base クラスのオブジェクトには、次の情報で構成される書式設定情報が格納されます。

  • fmtflags 型のオブジェクトの書式設定フラグ。

  • iostate 型のオブジェクト内の例外マスク。

  • intのオブジェクトのフィールド幅。

  • int 型のオブジェクトの表示桁数。

  • locale 型のオブジェクト内の locale オブジェクト。

  • long 型と void ポインターの要素を含む 2 つの拡張可能な配列。

ios_base クラスのオブジェクトでは、ストリームの状態情報が iostate 型のオブジェクトに格納されるほか、コールバックのスタックも格納されます。

メンバー

コンストラクター

名前 説明
ios_base ios_base オブジェクトを構築します。

Typedefs

名前 説明
event_callback register_call に渡される関数を記述します。
fmtflags 出力の外観を指定する定数。
iostate ストリームの状態を表す定数を定義します。
openmode ストリームとの対話方法を記述します。
seekdir オフセット演算の開始位置を指定します。

列挙型

名前 説明
event イベントの種類を指定します。

定数

名前 説明
adjustfield internal | left | right のように定義されるビットマスク。
app 各挿入前にストリームの末尾にシークするように指定します。
ate コントロール オブジェクトが最初に作成されたときに、ストリームの末尾にシークするように指定します。
badbit ストリーム バッファーの整合性の損失を記録します。
basefield dec | hex | oct のように定義されるビットマスク。
beg シーケンスの先頭からの相対シークを指定します。
binary テキスト ストリームではなく、バイナリ ストリームとしてファイルを読み取るように指定します。
boolalpha bool 型のオブジェクトを数値ではなく名前 (truefalse など) で挿入もしくは抽出するように指定します。
cur シーケンス内の現在位置からの相対シークを指定します。
dec 10 進形式で整数値を挿入もしくは抽出するように指定します。
end シーケンスの末尾からの相対シークを指定します。
eofbit ストリームからの抽出中にファイルの終わりを記録します。
failbit ストリームからの有効フィールドの抽出エラーを記録します。
fixed 固定小数点形式 (指数フィールドなし) で浮動小数点値を挿入するように指定します。
floatfield fixed | scientific のように定義されるビットマスク
goodbit 状態ビットをすべてクリアします。
hex 16 進数形式で整数値を挿入もしくは抽出するように指定します。
in ストリームからの抽出を指定します。
internal 生成された数値フィールドの内部ポイントに充てん文字を挿入することにより、フィールド幅を埋めます。
left 左揃えを指定します。
oct 8 進数形式で整数値を挿入もしくは抽出するように指定します。
out ストリームへの挿入を指定します。
right 右揃えを指定します。
scientific 指数形式 (指数フィールドあり) で浮動小数点値を挿入するように指定します。
showbase 生成された整数フィールドのベースを示すプレフィックスを挿入するように指定します。
showpoint 生成された浮動小数点フィールドに無条件で小数点を挿入するように指定します。
showpos 生成された負の値を取らない数値フィールドにプラス記号を挿入するように指定します。
skipws 特定の抽出の前に、先頭の空白文字をスキップすることを指定します。
trunc 既存のファイルのコントロール オブジェクトが作成されたときに、そのファイルの内容を削除するように指定します。
unitbuf 各挿入後に出力をフラッシュします。
uppercase 特定の挿入で小文字に対応する大文字を挿入するように指定します。

関数

名前 説明
failure このメンバー クラスは、クラス テンプレート basic_ios のメンバー関数 clear によってスローされるすべての例外の基底クラスとして機能します。
flags 現在のフラグ設定を設定するか返します。
getloc 格納されている locale オブジェクトを返します。
imbue ロケールを変更します。
Init 構築時に標準の iostream オブジェクトを作成します。
iword iword として格納される値を割り当てます。
precision 浮動小数点数で表示する桁数を指定します。
pword pword として格納される値を割り当てます。
register_callback コールバック関数を指定します。
setf 指定したフラグを設定します。
sync_with_stdio iostream と C ランタイム ライブラリの処理が、ソース コードに現れる順序で実行されるようにします。
unsetf 指定したフラグをオフにします。
width 出力ストリームの長さを設定します。
xalloc 変数がストリームの一部となるように指定します。

演算子

名前 説明
operator= ios_base オブジェクトの代入演算子。

必要条件

ヘッダー:<ios>

名前空間std:

event

イベントの種類を指定します。

enum event {
    erase_event,
    imbue_event,
    copyfmt_event};

解説

型は列挙型であり、register_callback に登録された関数の引数として使用するコールバック イベントを格納できるオブジェクトを記述します。 それぞれのイベント値は次のとおりです。

  • copyfmt_eventcopyfmt への呼び出しの終了付近の例外マスクがコピーされる直前に発生するコールバックを識別します。

  • erase_eventcopyfmt への呼び出しの開始時または *this のデストラクターへの呼び出しの開始時に発生するコールバックを識別します。

  • imbue_eventimbue への呼び出しの終了時の関数が返す直前に発生するコールバックを識別します。

例については、「register_callback」を参照してください。

event_callback

register_call に渡される関数を記述します。

typedef void (__cdecl *event_callback)(
    event _E,
    ios_base& _Base,
    int _I);

パラメーター

_E
event

_Base
イベントが呼び出されたストリーム。

_I
ユーザー定義された番号。

解説

この型は、register_callback に登録できる関数へのポインターを記述します。 関数のこの型は例外をスローできません。

event_callback の使用例については、「register_call」を参照してください。

failure

クラス failure は、ストリーム バッファー処理中に検出されたエラーを報告するために iostreams ライブラリの関数によって例外としてスローされるすべてのオブジェクトの型の基底クラスを定義します。

namespace std {
    class failure : public system_error {
    public:
        explicit failure(
            const string& _Message,
            const error_code& _Code = io_errc::stream);

        explicit failure(
            const char* str,
            const error_code& _Code = io_errc::stream);
    };
}

解説

what() によって返される値は _Message のコピーであり、_Code に基づいて、テストにより拡張されている可能性があります。 指定しない場合 _Code 、既定値は make_error_code(io_errc::stream).

// ios_base_failure.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main ( )
{
    using namespace std;
    fstream file;
    file.exceptions(ios::failbit);
    try
    {
        file.open( "rm.txt", ios_base::in );
        // Opens nonexistent file for reading
    }
    catch( ios_base::failure f )
    {
        cout << "Caught an exception: " << f.what() << endl;
    }
}
Caught an exception: ios_base::failbit set

flags

現在のフラグ設定を設定するか返します。

fmtflags flags() const;
fmtflags flags(fmtflags fmtfl);

パラメーター

fmtfl
新しい fmtflags 設定。

戻り値

以前または現在の fmtflags 設定。

解説

フラグの一覧については、「ios_base::fmtflags」を参照してください。

1 番目のメンバー関数は、格納されている書式設定フラグを返します。 2 番目のメンバー関数は、fmtfl を書式設定フラグに格納し、その前に格納されていた値を返します。

// ios_base_flags.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main ( )
{
    using namespace std;
    cout << cout.flags( ) << endl;
    cout.flags( ios::dec | ios::boolalpha );
    cout << cout.flags( );
}
513
16896

fmtflags

出力の外観を指定する定数。

class ios_base {
public:
   typedef implementation-defined-bitmask-type fmtflags;
   static const fmtflags boolalpha;
   static const fmtflags dec;
   static const fmtflags fixed;
   static const fmtflags hex;
   static const fmtflags internal;
   static const fmtflags left;
   static const fmtflags oct;
   static const fmtflags right;
   static const fmtflags scientific;
   static const fmtflags showbase;
   static const fmtflags showpoint;
   static const fmtflags showpos;
   static const fmtflags skipws;
   static const fmtflags unitbuf;
   static const fmtflags uppercase;
   static const fmtflags adjustfield;
   static const fmtflags basefield;
   static const fmtflags floatfield;
   // ...
};

解説

ios のマニピュレーターをサポートします。

この型は、書式設定フラグを格納できるオブジェクトを記述するビットマスク型です。 個々のフラグの値 (要素) は、次のとおりです。

  • dec、10 進形式で整数値を挿入または抽出します。

  • hex、16 進数形式で整数値を挿入または抽出します。

  • oct、8 進数形式で整数値を挿入または抽出します。

  • showbase、生成された整数フィールドのベースを示すプレフィックスを挿入します。

  • internal、生成された数値フィールドの内部ポイントに必要に応じて充てん文字を挿入することにより、フィールド幅を埋めます。 (フィールド幅の設定の詳細については、「setw」を参照してください。)

  • left、生成されたフィールドの最後に、必要に応じて充てん文字を挿入することにより、フィールド幅を埋めます (左揃えの場合)。

  • right、生成されたフィールドの先頭に、必要に応じて充てん文字を挿入することにより、フィールド幅を埋めます (右揃えの場合)。

  • boolalphabool 型のオブジェクトを数値ではなく名前 (truefalse など) で挿入もしくは抽出します。

  • fixed、固定小数点形式 (指数フィールドなし) で浮動小数点値を挿入します。

  • scientific、指数形式 (指数フィールドあり) で浮動小数点値を挿入します。

  • showpoint、生成された浮動小数点フィールドに無条件で小数点を挿入します。

  • showpos、生成された負の値を取らない数値フィールドにプラス記号を挿入します。

  • skipws、特定の抽出の前にある先頭の空白文字をスキップします。

  • unitbuf、各挿入後に出力をフラッシュします。

  • uppercase、特定の挿入で小文字に対応する大文字を挿入します。

さらに、次の値も役立ちます。

  • adjustfieldinternal | left | right のように定義されるビットマスク

  • basefielddec | hex | oct のように定義されます

  • floatfieldfixed | scientific のように定義されます

これらの書式設定フラグを変更する関数の例については、「<iomanip>」を参照してください。

getloc

格納されている locale オブジェクトを返します。

locale getloc() const;

戻り値

格納されている locale オブジェクト。

// ios_base_getlock.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
    using namespace std;
    cout << cout.getloc( ).name( ).c_str( ) << endl;
}
C

imbue

ロケールを変更します。

locale imbue(const locale& _Loc);

パラメーター

_Loc
新しいロケール設定。

戻り値

以前のロケール。

解説

このメンバー関数は _Loclocale オブジェクトに格納し、コールバック イベントおよび imbue_event を報告します。 以前に格納されていた値を返します。

サンプルについては、「basic_ios::imbue」を参照してください。

Init

構築時に標準の iostream オブジェクトを作成します。

class Init { };

解説

この入れ子になったクラスが記述するオブジェクトは、その構築により、任意の静的オブジェクトのコンストラクターの実行前でも標準 iostream オブジェクトが正しく構築されるようにします。

ios_base

ios_base オブジェクトを構築します。

ios_base();

解説

この (プロテクト) コンストラクターは、何も実行しません。 以降の basic_ios::init への呼び出しは、オブジェクトを安全に破棄する前に、初期化する必要があります。 そのため、クラス ios_base を安全に使用する唯一の方法は、クラス テンプレート basic_ios の基底クラスとして使用することです。

iostate

ストリームの状態を表す定数の型。

class ios_base {
public:
   typedef implementation-defined-bitmask-type iostate;
   static const iostate badbit;
   static const iostate eofbit;
   static const iostate failbit;
   static const iostate goodbit;
   // ...
};

解説

この型は、ストリーム状態情報を格納できるオブジェクトを記述するビットマスク型です。 個々のフラグの値 (要素) は、次のとおりです。

  • badbit。ストリーム バッファーの整合性の損失を記録します。
  • eofbit。ストリームからの抽出中にファイルの終わりを記録します。
  • failbit。ストリームからの有効フィールドの抽出エラーを記録します。

また、前述の値が設定されていない値 goodbit も役立ちます (goodbit は 0 になることが保証されます)。

iword

iword として格納される値を割り当てます。

long& iword(int idx);

パラメーター

idx
iword として格納する値のインデックス。

解説

このメンバー関数は、long 型の要素を含む拡張可能な配列の要素 Idx への参照を返します。 すべての要素は、実質的に存在し、最初に値 0 を格納します。 返される参照は、オブジェクトの iword への次の呼び出し後、オブジェクトが basic_ios::copyfmt への呼び出しで変更された後、またはオブジェクトが破棄された後に無効になります。

idx が負の場合または要素に一意の値が格納されていない場合、関数は setstate(badbit) を呼び出し、一意ではない可能性がある参照を返します。

ios_base 型のすべてのオブジェクト間で使用するための一意のインデックスを取得するには、xalloc を呼び出します。

iword の使用方法の例については、「xalloc」を参照してください。

openmode

ストリームとの対話方法を記述します。

class ios_base {
public:
   typedef implementation-defined-bitmask-type openmode;
   static const openmode  in;
   static const openmode  out;
   static const openmode  ate;
   static const openmode  app;
   static const openmode  trunc;
   static const openmode  binary;
   // ...
};

解説

複数の iostream オブジェクトのオープン モード。 フラグの値は次のとおりです。

定数 効果
app 各書き込みの前にストリームの末尾にシークします
ate 開いた直後にストリームの末尾にシークします
binary バイナリ モードで開きます。 (バイナリ モードの詳細については、「fopen」を参照してください。)
in 読み取り用に開きます
out 書き込み用に開きます
trunc 開いた後にファイルの内容を削除します

// ios_base_openmode.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main ( )
{
    using namespace std;
    fstream file;
    file.open( "rm.txt", ios_base::out | ios_base::trunc );

    file << "testing";
}

operator=

ios_base オブジェクトの代入演算子。

ios_base& operator=(const ios_base& right);

パラメーター

right
ios_base 型オブジェクト。

戻り値

割り当て先のオブジェクト。

解説

この演算子は、格納されている書式設定情報をコピーして、任意の拡張可能な配列の新しいコピーを作成します。 その後で *this が返されます。 コールバック スタックはコピーされません。

この演算子は、ios_base から派生したクラスでのみ使用されます。

precision

浮動小数点数で表示する桁数を指定します。

streamsize precision() const;
streamsize precision(streamsize _Prec);

パラメーター

_Prec
表示する有効桁数または固定小数点表記での小数点の後の桁数。

戻り値

1 番目のメンバー関数は、格納されている表示桁数を返します。 2 番目のメンバー関数は、_Prec を表示桁数に格納し、その前に格納されていた値を返します。

解説

浮動小数点数は、fixed によって固定小数点表記で表示されます。

// ios_base_precision.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
    using namespace std;
    float i = 31.31234F;

    cout.precision( 3 );
    cout << i << endl;          // display three significant digits
    cout << fixed << i << endl; // display three digits after decimal
                                // point
}
31.3
31.312

pword

pword として格納される値を割り当てます。

void *& pword(int index);

パラメーター

index
pword として格納する値のインデックス。

解説

このメンバー関数は、void 型のポインターの要素を含む拡張可能な配列の要素 Idx への参照を返します。 すべての要素は、実質的に存在し、最初に Null ポインターを格納します。 返される参照は、オブジェクトの pword への次の呼び出し後、オブジェクトが basic_ios::copyfmt への呼び出しで変更された後、またはオブジェクトが破棄された後に無効になります。

index が負の場合、または要素に一意の値が格納されていない場合、関数は setstate(badbit) を呼び出し、一意ではない可能性がある参照を返します。

ios_base 型のすべてのオブジェクト間で使用するための一意のインデックスを取得するには、xalloc を呼び出します。

pword の使用例については、xalloc を参照してください。

register_callback

コールバック関数を指定します。

void register_callback(
    event_callback pfn, int idx);

パラメーター

pfn
コールバック関数へのポインター。

idx
ユーザー定義された番号。

解説

このメンバー関数は、ペア {pfn, idx} を、格納されているコールバックのスタック callback stack 上にプッシュします。 コールバック イベント ev が報告されると、式 (*pfn)(ev, *this, idx) によって、レジストリの逆の順序で関数が呼び出されます。

// ios_base_register_callback.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

using namespace std;

void callback1( ios_base::event e, ios_base& stream, int arg )
{
    cout << "in callback1" << endl;
    switch ( e )
    {
    case ios_base::erase_event:
        cout << "an erase event" << endl;
        break;
    case ios_base::imbue_event:
        cout << "an imbue event" << endl;
        break;
    case ios_base::copyfmt_event:
        cout << "an copyfmt event" << endl;
        break;
    };
}

void callback2( ios_base::event e, ios_base& stream, int arg )
{
    cout << "in callback2" << endl;
    switch ( e )
    {
    case ios_base::erase_event:
        cout << "an erase event" << endl;
        break;
    case ios_base::imbue_event:
        cout << "an imbue event" << endl;
        break;
    case ios_base::copyfmt_event:
        cout << "an copyfmt event" << endl;
        break;
    };
}

int main( )
{
    // Make sure the imbue will not throw an exception
    // assert( setlocale( LC_ALL, "german" )!=NULL );

    cout.register_callback( callback1, 0 );
    cin.register_callback( callback2, 0 );

    try
    {
        // If no exception because the locale's not found,
        // generate an imbue_event on callback1
        cout.imbue(locale("german"));
    }
    catch(...)
    {
        cout << "exception" << endl;
    }

    // This will
    // (1) erase_event on callback1
    // (2) copyfmt_event on callback2
    cout.copyfmt(cin);

    // We get two erase events from callback2 at the end because
    // both cin and cout have callback2 registered when cin and cout
    // are destroyed at the end of program.
}
in callback1
an imbue event
in callback1
an erase event
in callback2
an copyfmt event
in callback2
an erase event
in callback2
an erase event

seekdir

オフセット演算の開始位置を指定します。

namespace std {
    class ios_base {
    public:
        typedef implementation-defined-enumerated-type seekdir;
        static const seekdir beg;
        static const seekdir cur;
        static const seekdir end;
        // ...
    };
}

解説

型は列挙型であり、複数の iostream クラスのメンバー関数への引数として使用するシーク モードを格納できるオブジェクトを記述します。 次に、それぞれのフラグ値を示します。

  • beg。シーケンス (ファイル、ストリーム、またはファイル) の開始位置を基準にしてシークします (現在の読み取りまたは書き込み位置を変更します)。

  • cur。シーケンス内の現在位置を基準にしてシークします。

  • end。シーケンスの終了位置を基準にしてシークします。

// ios_base_seekdir.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main ( )
{
    using namespace std;
    fstream file;
    file.open( "rm.txt", ios_base::out | ios_base::trunc );

    file << "testing";
    file.seekp( 0, ios_base::beg );
    file << "a";
    file.seekp( 0, ios_base::end );
    file << "a";
}

setf

指定したフラグを設定します。

fmtflags setf(
    fmtflags _Mask
);
fmtflags setf(
    fmtflags _Mask,
    fmtflags _Unset
);

パラメーター

_Mask
オンにするフラグ。

_Unset
オフにするフラグ。

戻り値

前の書式設定フラグ

解説

最初のメンバー関数は flags(_Mask | _Flags) (選択したビットの設定) を実際に呼び出してから、前の書式フラグを返します。 2 番目のメンバー関数は flags(_Mask & fmtfl, flags & ~_Mask) (マスクの下の選択したビットの置き換え) を実際に呼び出してから、前の書式設定フラグを返します。

// ios_base_setf.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
    using namespace std;
    int i = 10;
    cout << i << endl;

    cout.unsetf( ios_base::dec );
    cout.setf( ios_base::hex );
    cout << i << endl;

    cout.setf( ios_base::dec );
    cout << i << endl;
    cout.setf( ios_base::hex, ios_base::dec );
    cout << i << endl;
}

sync_with_stdio

iostream と C ランタイム ライブラリの処理が、ソース コードに現れる順序で実行されるようにします。

static bool sync_with_stdio(
   bool _Sync = true
);

パラメーター

_Sync
すべてのストリームが stdio と同期しているかどうか。

戻り値

この関数の前の設定。

解説

静的メンバー関数は、stdio 同期フラグ (最初は true) を格納します。 このフラグを設定すると true、C++ 標準ライブラリで定義されている関数と関数の間 iostreams で、同じファイルに対する操作が正しく同期されます。 そうでない場合、同期は保証されることもそうでないこともありますが、パフォーマンスは向上する可能性があります。 この関数は、_Syncstdio 同期フラグに格納し、前に格納されていた値を返します。 これを確実に呼び出すことができるのは、標準ストリームに対して操作を実行する前のみです。

unsetf

指定したフラグをオフにします。

void unsetf(
   fmtflags _Mask
);

パラメーター

_Mask
オフにするフラグ。

解説

このメンバー関数は flags(~_Mask & flags) (選択したビットのクリア) を実際に呼び出します。

unsetf の使用例については、「ios_base::setf」を参照してください。

width

出力ストリームの長さを設定します。

streamsize width( ) const;
streamsize width(
   streamsize _Wide
);

パラメーター

_Wide
出力ストリームの必要なサイズ。

戻り値

現在の幅の設定。

解説

1 番目のメンバー関数は、格納されているフィールド幅を返します。 2 番目のメンバー関数は、_Wide をフィールド幅に格納し、前に格納されていた値を返します。

// ios_base_width.cpp
// compile with: /EHsc
#include <iostream>

int main( ) {
    using namespace std;

    cout.width( 20 );
    cout << cout.width( ) << endl;
    cout << cout.width( ) << endl;
}
20
0

xalloc

変数がストリームの一部となるように指定します。

static int xalloc( );

戻り値

静的メンバー関数は、格納されている静的な値 (呼び出しごとに増加します) を返します。

解説

メンバー関数 iword または pword を呼び出すときに、戻り値を一意のインデックス引数として使用できます。

// ios_base_xalloc.cpp
// compile with: /EHsc
// Lets you store user-defined information.
// iword, jword, xalloc
#include <iostream>

int main( )
{
    using namespace std;

    static const int i = ios_base::xalloc();
    static const int j = ios_base::xalloc();
    cout.iword( i ) = 11;
    cin.iword( i ) = 13;
    cin.pword( j ) = "testing";
    cout << cout.iword( i ) << endl;
    cout << cin.iword( i ) << endl;
    cout << ( char * )cin.pword( j ) << endl;
}
11
13
testing

関連項目

C++ 標準ライブラリ内のスレッド セーフ
iostream プログラミング
iostreams の規則