basic_ostream クラス
このクラス テンプレートは、Elem
型 (char_type とも呼ばれる) の要素を含むストリーム バッファーに要素とエンコードされたオブジェクトを挿入する際に、この処理を制御するオブジェクトを記述します。その特性は、クラス Tr
(traits_type とも呼ばれる) によって決定されます。
構文
template <class Elem, class Tr = char_traits<Elem>>
class basic_ostream : virtual public basic_ios<Elem, Tr>
パラメーター
Elem
char_type
です。
Tr
traits_type
文字。
解説
operator<< をオーバーロードするメンバー関数のほとんどは、書式が設定されている出力関数です。 これらは以下のパターンに従います。
iostate state = goodbit;
const sentry ok(*this);
if (ok)
{try
{<convert and insert elements
accumulate flags in state> }
catch (...)
{try
{setstate(badbit);
}
catch (...)
{}
if ((exceptions()& badbit) != 0)
throw; }}
width(0);
// Except for operator<<(Elem)
setstate(state);
return (*this);
他の 2 つのメンバー関数は、書式が設定されていない出力関数です。 これらは以下のパターンに従います。
iostate state = goodbit;
const sentry ok(*this);
if (!ok)
state |= badbit;
else
{try
{<obtain and insert elements
accumulate flags in state> }
catch (...)
{try
{setstate(badbit);
}
catch (...)
{}
if ((exceptions()& badbit) != 0)
throw; }}
setstate(state);
return (*this);
要素の挿入中にエラーが発生した場合、どちらの関数グループも setstate(badbit) を呼び出します。
basic_istream<Elem, Tr> クラスのオブジェクトは、basic_ios<Elem, Tr> クラスの仮想パブリック ベース オブジェクトのみを格納します。
例
出力ストリームの詳細については、「basic_ofstream クラス」の例をご覧ください。
コンストラクター
コンストラクター | 説明 |
---|---|
basic_ostream | basic_ostream オブジェクトを構築します。 |
メンバー関数
メンバー関数 | 説明 |
---|---|
flush | バッファーをフラッシュします。 |
put | ストリームに 1 文字渡します。 |
seekp | 出力ストリーム内の位置をリセットします。 |
sentry | この入れ子になったクラスは、宣言によって書式設定された出力関数と書式設定されていない出力関数を構成するオブジェクトを記述します。 |
スワップ | basic_ostream オブジェクトの値を、指定した basic_ostream オブジェクトの値と交換します。 |
tellp | 出力ストリーム内の位置を報告します。 |
write | ストリームに文字を渡します。 |
演算子
演算子 | 説明 |
---|---|
operator= | 指定された basic_ostream オブジェクト パラメーターの値をこのオブジェクトに代入します。 |
operator<< | ストリームに書き込みます。 |
要件
ヘッダー:<ostream>
名前空間: std
basic_ostream::basic_ostream
basic_ostream
オブジェクトを構築します。
explicit basic_ostream(
basic_streambuf<Elem, Tr>* strbuf,
bool _Isstd = false);
basic_ostream(basic_ostream&& right);
パラメーター
strbuf
basic_streambuf 型のオブジェクト。
_Isstd
これが標準ストリームの場合は true
、それ以外の場合は false
。
right
basic_ostream
型のオブジェクトへの右辺値参照。
解説
最初のコンストラクターが init(strbuf
) を呼び出して基底クラスを初期化します。 2 番目のコンストラクターが basic_ios::move(right)
を呼び出して基底クラスを初期化します。
例
出力ストリームの詳細については、「basic_ofstream::basic_ofstream」の例をご覧ください。
basic_ostream::flush
バッファーをフラッシュします。
basic_ostream<Elem, Tr>& flush();
戻り値
basic_ostream オブジェクトへの参照。
解説
rdbuf が Null ポインターではない場合、関数は rdbuf->pubsync を呼び出します。 -1 を返す場合、関数は setstate(badbit) を呼び出します。 *this を返します。
例
// basic_ostream_flush.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
using namespace std;
cout << "test";
cout.flush();
}
test
basic_ostream::operator<<
ストリームに書き込みます。
basic_ostream<Elem, Tr>& operator<<(
basic_ostream<Elem, Tr>& (* Pfn)(basic_ostream<Elem, Tr>&));
basic_ostream<Elem, Tr>& operator<<(
ios_base& (* Pfn)(ios_base&));
basic_ostream<Elem, Tr>& operator<<(
basic_ios<Elem, Tr>& (* Pfn)(basic_ios<Elem, Tr>&));
basic_ostream<Elem, Tr>& operator<<(basic_streambuf<Elem, Tr>* strbuf);
basic_ostream<Elem, Tr>& operator<<(bool val);
basic_ostream<Elem, Tr>& operator<<(short val);
basic_ostream<Elem, Tr>& operator<<(unsigned short val);
basic_ostream<Elem, Tr>& operator<<(int __w64 val);
basic_ostream<Elem, Tr>& operator<<(unsigned int __w64 val);
basic_ostream<Elem, Tr>& operator<<(long val);
basic_ostream<Elem, Tr>& operator<<(unsigned long __w64 val);
basic_ostream<Elem, Tr>& operator<<(long long val);
basic_ostream<Elem, Tr>& operator<<(unsigned long long val);
basic_ostream<Elem, Tr>& operator<<(float val);
basic_ostream<Elem, Tr>& operator<<(double val);
basic_ostream<Elem, Tr>& operator<<(long double val);
basic_ostream<Elem, Tr>& operator<<(const void* val);
パラメーター
Pfn
関数ポインター。
strbuf
stream_buf
オブジェクトを指すポインターです。
val
ストリームに書き込む要素。
戻り値
basic_ostream オブジェクトへの参照。
解説
<ostream> ヘッダーは複数のグローバル挿入演算子も定義します。 詳細については、「operator<<」を参照してください。
最初のメンバー関数は、ostr << endl
形式の式が endl(ostr) を呼び出し、*this を返すことを保証します。 2 番目と 3 番目の関数は、hex などの他のマニピュレーターが同じように動作することを保証します。 残りの関数はすべて書式付き出力関数です。
関数
basic_ostream<Elem, Tr>& operator<<(basic_streambuf<Elem, Tr>* strbuf);
strbuf が Null ポインターではない場合に、要素を strbuf から抽出し、それらを挿入します。 抽出は、ファイルの終わりで、または抽出が (再スローされた) 例外をスローする場合に停止します。 また、挿入が失敗した場合は、対象の要素を抽出せずに停止します。 関数が要素を挿入しない場合、または抽出が例外をスローする場合、関数は setstate(failbit) を呼び出します。 いずれの場合も関数は *this を返します。
関数
basic_ostream<Elem, Tr>& operator<<(bool val);
_Val
をブール値フィールドに変換して挿入します。これは、use_facet<num_put<Elem, OutIt>(
getloc) を呼び出して行います。 put(OutIt(rdbuf), *this, getloc
, val). ここで、OutIt
は ostreambuf_iterator<Elem, Tr> として定義されます。 関数は *this を返します。
関数
basic_ostream<Elem, Tr>& operator<<(short val);
basic_ostream<Elem, Tr>& operator<<(unsigned short val);
basic_ostream<Elem, Tr>& operator<<(int val);
basic_ostream<Elem, Tr>& operator<<(unsigned int __w64 val);
basic_ostream<Elem, Tr>& operator<<(long val);
basic_ostream<Elem, Tr>& operator<<(unsigned long val);
basic_ostream<Elem, Tr>& operator<<(long long val);
basic_ostream<Elem, Tr>& operator<<(unsigned long long val);
basic_ostream<Elem, Tr>& operator<<(const void* val);
それぞれ val を数値フィールドに変換して挿入します。これは、use_facet<num_put<Elem, OutIt>(getloc
) を呼び出して行います。 put(OutIt(rdbuf
), *this, getloc
, val)。 ここで、OutIt は ostreambuf_iterator<Elem, Tr> として定義されます。 関数は *this を返します。
関数
basic_ostream<Elem, Tr>& operator<<(float val);
basic_ostream<Elem, Tr>& operator<<(double val);
basic_ostream<Elem, Tr>& operator<<(long double val);
それぞれが、val を数値フィールドに変換して挿入します。これは、use_facet<num_put<Elem, OutIt>(getloc
). put(OutIt(rdbuf
), *this, getloc
, val) を呼び出すことで行います。 ここで、OutIt は ostreambuf_iterator<Elem, Tr> として定義されます。 関数は *this を返します。
例
// basic_ostream_op_write.cpp
// compile with: /EHsc
#include <iostream>
#include <string.h>
using namespace std;
ios_base& hex2( ios_base& ib )
{
ib.unsetf( ios_base::dec );
ib.setf( ios_base::hex );
return ib;
}
basic_ostream<char, char_traits<char> >& somefunc(basic_ostream<char, char_traits<char> > &i)
{
if (i == cout)
{
i << "i is cout" << endl;
}
return i;
}
class CTxtStreambuf : public basic_streambuf< char, char_traits< char > >
{
public:
CTxtStreambuf(char *_pszText)
{
pszText = _pszText;
setg(pszText, pszText, pszText + strlen(pszText));
};
char *pszText;
};
int main()
{
cout << somefunc;
cout << 21 << endl;
hex2(cout);
cout << 21 << endl;
CTxtStreambuf f("text in streambuf");
cout << &f << endl;
}
basic_ostream::operator=
指定された basic_ostream
オブジェクト パラメーターの値をこのオブジェクトに代入します。
basic_ostream& operator=(basic_ostream&& right);
パラメーター
right
basic_ostream
オブジェクトへの rvalue
参照。
解説
このメンバー演算子は、swap (right)
を呼び出します。
basic_ostream::p ut
ストリームに 1 文字渡します。
basic_ostream<Elem, Tr>& put(char_type _Ch);
パラメーター
_Ch
単一の文字。
戻り値
basic_ostream オブジェクトへの参照。
解説
書式設定されていない出力関数は、要素 _Ch を挿入します。 *this を返します。
例
// basic_ostream_put.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
using namespace std;
cout.put( 'v' );
cout << endl;
wcout.put( L'l' );
}
v
l
basic_ostream::seekp
出力ストリーム内の位置をリセットします。
basic_ostream<Elem, Tr>& seekp(pos_type _Pos);
basic_ostream<Elem, Tr>& seekp(off_type _Off, ios_base::seekdir _Way);
パラメーター
_Pos
ストリーム内の位置。
_Off
_Way への相対オフセット。
_Way
ios_base::seekdir 列挙体のうちの 1 つ。
戻り値
basic_ostream オブジェクトへの参照。
解説
failがfalse
の場合、最初のメンバー関数はnewpos = rdbuf-> pubseekpos(_Pos) を呼び出pos_type
一時オブジェクトnewpos
。 fail
が false の場合、2 番目の関数は newpos = rdbuf-> pubseekoff(_Off, _Way) を呼び出します。 いずれの場合も、(off_type
)newpos == (off_type
)(-1) (位置指定操作が失敗) の場合、関数は istr.setstate(failbit) を呼び出します。 どちらの関数も *this を返します。
例
// basic_ostream_seekp.cpp
// compile with: /EHsc
#include <fstream>
#include <iostream>
int main()
{
using namespace std;
ofstream x("basic_ostream_seekp.txt");
streamoff i = x.tellp();
cout << i << endl;
x << "testing";
i = x.tellp();
cout << i << endl;
x.seekp(2); // Put char in third char position in file
x << " ";
x.seekp(2, ios::end); // Put char two after end of file
x << "z";
}
0
7
basic_ostream::sentry
この入れ子になったクラスは、宣言によって書式設定された出力関数と書式設定されていない出力関数を構成するオブジェクトを記述します。
class sentry { public: explicit sentry(basic_ostream<Elem, Tr>& _Ostr); operator bool() const; ~sentry(); };
解説
この入れ子になったクラスは、宣言によって書式設定された出力関数と書式設定されていない出力関数を構成するオブジェクトを記述します。 ostr.good が true
で、ostr.tie が Null ポインターではない場合、コンストラクターは ostr.tie->flush を呼び出します。 コンストラクターは ostr.good
によって返される値を status
に格納します。 後で operator bool
を呼び出すと、この格納された値が配信されます。
uncaught_exception
が false
および flags & unitbuf が 0 以外の場合、デストラクターは flush を呼び出します。
basic_ostream::swap
basic_ostream
オブジェクトの値を、指定した basic_ostream
の値と交換します。
void swap(basic_ostream& right);
パラメーター
right
basic_ostream
オブジェクトへの参照です。
解説
このメンバー関数は、basic_ios::swap(right)
を呼び出して、right の内容をこのオブジェクトの内容と交換します。
basic_ostream::tellp
出力ストリーム内の位置を報告します。
pos_type tellp();
戻り値
出力ストリーム内の位置。
解説
fail がfalse
の場合、メンバー関数は rdbuf-> pubseekoff(0, cur
, in) を返します。 それ以外の場合は、pos_type
(-1) を返します。
例
tellp
の使用例は、「seekp」を参照してください。
basic_ostream::write
ストリームに文字を渡します。
basic_ostream<Elem, Tr>& write(const char_type* str, streamsize count);
パラメーター
count
ストリームに渡す文字の数。
str
ストリームに渡す文字。
戻り値
basic_ostream オブジェクトへの参照。
解説
書式設定されていない出力関数は、str で始まる count 要素のシーケンスを挿入します。
例
write
の使用例は、「streamsize」を参照してください。