basic_ostream-Klasse
Diese Klassenvorlage beschreibt ein Objekt, das das Einfügen von Elementen und codierten Objekten in einen Datenstrompuffer mit Elementen vom Typ Elem
steuert, die auch als char_type bezeichnet werden, deren Zeicheneigenschaften durch die Klasse Tr
bestimmt 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 newpos
auf. 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, cur
in) 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