次の方法で共有


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). ここで、OutItostreambuf_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)。 ここで、OutItostreambuf_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) を呼び出すことで行います。 ここで、OutItostreambuf_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 オブジェクトへの参照。

解説

failfalseの場合、最初のメンバー関数はnewpos = rdbuf-> pubseekpos(_Pos) を呼び出pos_type一時オブジェクトnewposfailが 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.goodtrue で、ostr.tie が Null ポインターではない場合、コンストラクターは ostr.tie->flush を呼び出します。 コンストラクターは ostr.good によって返される値を status に格納します。 後で operator bool を呼び出すと、この格納された値が配信されます。

uncaught_exceptionfalse および 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();

戻り値

出力ストリーム内の位置。

解説

failfalseの場合、メンバー関数は 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」を参照してください。

関連項目

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