basic_ostream-Klasse

Diese Klassenvorlage beschreibt ein Objekt, das das Einfügen von Elementen und codierten Objekten in einen Datenstrompuffer mit Elementen vom Typ Elemsteuert, die auch als char_type bezeichnet werden, deren Zeicheneigenschaften durch die Klasse Trbestimmt werden , auch als traits_type bezeichnet.

Syntax

template <class Elem, class Tr = char_traits<Elem>>
class basic_ostream : virtual public basic_ios<Elem, Tr>

Parameter

Elem
Ein char_type.

Tr
Das traits_type Zeichen.

Hinweise

Die meisten Memberfunktionen, die den Überladungsoperator<< aufweisen, sind formatierte Ausgabefunktionen. Sie entsprechen dem folgenden Muster:

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);

Zwei weitere Memberfunktionen sind Funktionen für unformatierte Ausgabe. Sie entsprechen dem folgenden Muster:

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);

Beide Gruppen von Funktionen rufen setstate(badbit) auf, wenn beim Einfügen von Elementen ein Fehler auftritt.

Ein Objekt der Klasse basic_istream<Elem, Tr> speichert nur ein virtuelles öffentliches Basisobjekt der Klasse basic_ios<Elem, Tr.>

Beispiel

Weitere Informationen zu Ausgabestreams finden Sie im Beispiel für die basic_ofstream-Klasse.

Konstruktoren

Konstruktor Beschreibung
basic_ostream Erstellt ein basic_ostream-Objekt.

Memberfunktionen

Memberfunktion Beschreibung
flush Leert den Puffer.
put Schreibt ein Zeichen in einen Stream.
seekp Setzt die Position im Ausgabestream zurück.
sentry Die geschachtelte Klasse beschreibt ein Objekt, dessen Deklaration die Funktionen für formatierte Ausgabe und für unformatierte Ausgabe strukturiert.
swap Tauscht die Werte dieses basic_ostream-Objekts gegen die Werte des bereitgestellten basic_ostream-Objekts aus.
tellp Meldet die Position im Ausgabestream.
write Schreibt Zeichen in einen Stream.

Operatoren

Operator Beschreibung
operator= Weist diesem Objekt den Wert des bereitgestellten basic_ostream-Objektparameters zu.
operator<< Schreibt in den Stream.

Anforderungen

Header:<ostream>

Namespace: std

basic_ostream::basic_ostream

Erstellt ein basic_ostream-Objekt.

explicit basic_ostream(
    basic_streambuf<Elem, Tr>* strbuf,
    bool _Isstd = false);

basic_ostream(basic_ostream&& right);

Parameter

strbuf
Ein Objekt vom Typ basic_streambuf.

_Isstd
true wenn es sich um einen Standardstream handelt; andernfalls false.

right
Ein rvalue-Verweis auf ein Objekt des Typs basic_ostream.

Hinweise

Der erste Konstruktor initialisiert die Basisobjekte durch Aufrufen von init(strbuf). Der zweite Konstruktor initialisiert die Basisklasse durch Aufrufen von basic_ios::move(right).

Beispiel

Weitere Informationen zu Ausgabestreams finden Sie im Beispiel für basic_ofstream::basic_ofstream.

basic_ostream::flush

Leert den Puffer.

basic_ostream<Elem, Tr>& flush();

Rückgabewert

Ein Verweis auf das basic_ostream-Objekt.

Hinweise

Wenn rdbuf kein Nullzeiger ist, ruft die Funktion rdbuf-pubsync> auf. Wenn -1 zurückgegeben wird, ruft die Funktion setstate ( badbit) auf. Es gibt *this zurück.

Beispiel

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

int main( )
{
   using namespace std;
   cout << "test";
   cout.flush();
}
test

basic_ostream::operator<<

Schreibt in den Stream.

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);

Parameter

Pfn
Ein Funktionszeiger.

strbuf
Ein Zeiger auf ein stream_buf-Objekt.

val
Ein Element, das in den Stream geschrieben werden soll.

Rückgabewert

Ein Verweis auf das basic_ostream-Objekt.

Hinweise

Der <ostream-Header> definiert auch mehrere globale Einfügeoperatoren. Weitere Informationen finden Sie unter Operator<<.

Die erste Memberfunktion stellt sicher, dass ein Ausdruck des Formulars endl(ostr) aufruft und dann *this zurückgibt.ostr << endl Die zweiten und dritten Funktionen stellen sicher, dass andere Manipulatoren, z.B. hex sich ähnlich verhalten. Die übrigen Funktionen sind alle formatierte Ausgabefunktionen.

Die -Funktion

basic_ostream<Elem, Tr>& operator<<(basic_streambuf<Elem, Tr>* strbuf);

extrahiert Elemente aus strbuf, wenn strbuf kein Nullzeiger ist, und fügt sie ein. Die Extrahierung hält am Ende der Datei an, oder wenn eine Extrahierung eine Ausnahme auslöst (die erneut ausgelöst wird). Sie hält ebenfalls an, ohne das jeweilige Element zu extrahieren, wenn bei einer Einfügung ein Fehler auftritt. Wenn die Funktion kein Element einfügt, oder wenn eine Extahierung eine Ausnahme auslöst, ruft die Funktion setstate(failbit) aus. In jedem Fall gibt die Funktion *this zurück.

Die -Funktion

basic_ostream<Elem, Tr>& operator<<(bool val);

_Val konvertiert in ein boolesches Feld und fügt es ein, indem use_facet num_put<<Elem, OutIt>(getloc) aufgerufen wird. put(OutIt(rdbuf), *this, getloc, val). OutIt Hier wird als ostreambuf_iterator<Elem, Tr> definiert. Die Funktion gibt *this zurück.

Die Funktionen

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);

jede Konvertierung in ein numerisches Feld und fügt sie ein, indem sie use_facet<num_put<Elem, OutIt>(getloc) aufruft. put(OutIt(rdbuf), *this, getloc, val). Hier wird OutIt als ostreambuf_iterator<Elem, Tr> definiert. Die Funktion gibt *this zurück.

Die Funktionen

basic_ostream<Elem, Tr>& operator<<(float val);
basic_ostream<Elem, Tr>& operator<<(double val);
basic_ostream<Elem, Tr>& operator<<(long double val);

jede Konvertierung in ein numerisches Feld und fügen sie durch Aufrufen use_facet<num_put<Elem, OutIt>(getloc). put(OutIt(rdbuf), *this, getloc, val) ein. Hier wird OutIt als ostreambuf_iterator<Elem, Tr> definiert. Die Funktion gibt *this zurück.

Beispiel

// 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=

Weist diesem Objekt Werte für den bereitgestellten basic_ostream-Objektparameter zu.

basic_ostream& operator=(basic_ostream&& right);

Parameter

right
Ein rvalue-Verweis auf ein basic_ostream-Objekt.

Hinweise

Der Memberoperator ruft swap (right) auf.

basic_ostream::p ut

Schreibt ein Zeichen in einen Stream.

basic_ostream<Elem, Tr>& put(char_type _Ch);

Parameter

_Ch
Ein Zeichen.

Rückgabewert

Ein Verweis auf das basic_ostream-Objekt.

Hinweise

Die unformatierte Ausgabefunktion fügt das Element _Ch ein. Es gibt *this zurück.

Beispiel

// 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

Setzt die Position im Ausgabestream zurück.

basic_ostream<Elem, Tr>& seekp(pos_type _Pos);

basic_ostream<Elem, Tr>& seekp(off_type _Off, ios_base::seekdir _Way);

Parameter

_Pos
Die Position im Stream.

_Aus
Der Offset relativ zu _Way.

_Weg
Eine der ios_base::seekdir-Enumerationen.

Rückgabewert

Ein Verweis auf das basic_ostream-Objekt.

Hinweise

Wenn ein Fehler auftrittfalse, ruft die erste Memberfunktion newpos = rdbuf- > pubseekpos(_Pos) für ein temporäres pos_type Objekt newposauf. Ist fail "false", ruft die zweite Funktion newpos = rdbuf- >pubseekoff(_Off, _Way) auf. In jedem Fall ruft die Funktion istr.setstate(failbit) auf, wenn (off_type)newpos == (off_type)(-1)(-1) (die Positionierung schlägt fehl). Beide Funktionen geben *this zurück.

Beispiel

// 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

Die geschachtelte Klasse beschreibt ein Objekt, dessen Deklaration die Funktionen für formatierte Ausgabe und für unformatierte Ausgabe strukturiert.

class sentry { public: explicit sentry(basic_ostream<Elem, Tr>& _Ostr); operator bool() const; ~sentry(); };

Hinweise

Die geschachtelte Klasse beschreibt ein Objekt, dessen Deklaration die Funktionen für formatierte Ausgabe und für unformatierte Ausgabe strukturiert. Wenn ostr.gut ist true und ostr."tie" ist kein Nullzeiger, der Konstruktor ruft "ostr.tie-flush>" auf. Der Konstruktor speichert dann den wert, der von ostr.good in status. Ein späterer Aufruf, um diesen gespeicherten Wert zu operator bool liefern.

Wenn uncaught_exception "Returnsfalse" und "flags & unitbuf" nicht "nonzero" ist, ruft der Destruktor flush auf.

basic_ostream::swap

Tauscht die Werte dieses basic_ostream-Objekts gegen die Werte des bereitgestellten basic_ostream-Objekts aus.

void swap(basic_ostream& right);

Parameter

right
Ein Verweis auf ein basic_ostream-Objekt.

Hinweise

Die Memberfunktion ruft basic_ios::swap(right) auf, um den Inhalt dieses Objekts für den Inhalt des Rechts auszutauschen.

basic_ostream::tellp

Meldet die Position im Ausgabestream.

pos_type tellp();

Rückgabewert

Position im Ausgabestream.

Hinweise

Wenn ein Fehler auftrittfalse, gibt die Memberfunktion rdbuf- >pubseekoff(0, curin) zurück. Andernfalls wird pos_type(-1) zurückgegeben.

Beispiel

Ein Beispiel für die Verwendung von tellp finden Sie unter seekp.

basic_ostream::write

Schreibt Zeichen in einen Stream.

basic_ostream<Elem, Tr>& write(const char_type* str, streamsize count);

Parameter

count
Die Anzahl der Zeichen, die in den Stream geschrieben werden sollen.

str
Die Zeichen, die in den Stream geschrieben werden sollen.

Rückgabewert

Ein Verweis auf das basic_ostream-Objekt.

Hinweise

Die unformatierte Ausgabefunktion fügt die Reihenfolge der Anzahlelemente ein, die bei str beginnen.

Beispiel

Ein Beispiel für die Verwendung von write finden Sie unter streamsize.

Siehe auch

Threadsicherheit in der C++-Standardbibliothek
iostream-Programmierung
iostreams-Konventionen