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 型のオブジェクトを数値ではなく名前 (true や false など) で挿入もしくは抽出するように指定します。 |
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_event
。copyfmt
への呼び出しの終了付近の例外マスクがコピーされる直前に発生するコールバックを識別します。erase_event
。copyfmt
への呼び出しの開始時または*this
のデストラクターへの呼び出しの開始時に発生するコールバックを識別します。imbue_event
。imbue
への呼び出しの終了時の関数が返す直前に発生するコールバックを識別します。
例
例については、「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
、生成されたフィールドの先頭に、必要に応じて充てん文字を挿入することにより、フィールド幅を埋めます (右揃えの場合)。boolalpha
、bool
型のオブジェクトを数値ではなく名前 (true
やfalse
など) で挿入もしくは抽出します。fixed
、固定小数点形式 (指数フィールドなし) で浮動小数点値を挿入します。scientific
、指数形式 (指数フィールドあり) で浮動小数点値を挿入します。showpoint
、生成された浮動小数点フィールドに無条件で小数点を挿入します。showpos
、生成された負の値を取らない数値フィールドにプラス記号を挿入します。skipws
、特定の抽出の前にある先頭の空白文字をスキップします。unitbuf
、各挿入後に出力をフラッシュします。uppercase
、特定の挿入で小文字に対応する大文字を挿入します。
さらに、次の値も役立ちます。
adjustfield
。internal
|left
|right
のように定義されるビットマスクbasefield
。dec
|hex
|oct
のように定義されますfloatfield
。fixed
|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
新しいロケール設定。
戻り値
以前のロケール。
解説
このメンバー関数は _Loc
を locale
オブジェクトに格納し、コールバック イベントおよび 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
関数と関数の間で、同じファイルに対する操作が正しく同期されます。 そうでない場合、同期は保証されることもそうでないこともありますが、パフォーマンスは向上する可能性があります。 この関数は、_Sync
を stdio
同期フラグに格納し、前に格納されていた値を返します。 これを確実に呼び出すことができるのは、標準ストリームに対して操作を実行する前のみです。
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