basic_ostream-Klasse
Diese Klassenvorlage beschreibt ein Objekt, das das Einfügen von Elementen und codierten Objekten in einen Datenstrompuffer mit Elementen des Typs Elem
steuert, auch bekannt als char_type, dessen 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
einen char_type
Tr
Der traits_type
eines Zeichens.
Bemerkungen
Die meisten Memberfunktionen, die den Überladungsoperator<< verwenden, 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
.
Bemerkungen
Der erste Konstruktor initialisiert die Basisklasse durch Aufrufen von init(strbuf
). Der zweite Konstruktor initialisiert die Basisklasse, indem basic_ios::move(right)
aufgerufen wird.
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.
Bemerkungen
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.
Bemerkungen
Der <ostream-Header> definiert auch mehrere globale Einfügeoperatoren. Weitere Informationen finden Sie im Operator<<.
Die erste Memberfunktion stellt sicher, dass ein Ausdruck des Formulars ostr << endl
endl(ostr) aufruft und dann *this zurückgibt. 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 durch Aufrufen von use_facet<num_put< Elem, OutItgetloc>(
) ein. put(OutIt(rdbuf), *this, getloc
, val). OutIt
Hier wird als ostreambuf_iterator<Elem, Tr> definiert. Die Funktion gibt *dies 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);
jedes Konvertieren von Val in ein numerisches Feld und fügt sie ein, indem use_facet num_put Elem, OutIt>() aufgerufen<< wird.getloc
put(OutIt(rdbuf
), *this, getloc
, val). Hier wird OutIt als ostreambuf_iterator< Elem, Tr>. definiert. Die Funktion gibt *dies 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);
jedes Konvertieren von Val in ein numerisches Feld und einfügen sie durch Aufrufen von use_facet<< num_put Elem, OutIt(). put(OutIt>(getloc
rdbuf
), *this, getloc
val). Hier wird OutIt als ostreambuf_iterator< Elem, Tr>. definiert. Die Funktion gibt *dies 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.
Bemerkungen
Der Memberoperator ruft swap (right)
auf.
basic_ostream::put
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.
Bemerkungen
Die nicht formatierte Ausgabefunktion fügt das Element _Ch ein. Es gibt *dies 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.
_Off
Der Offset relativ zu _Way.
_Way
Eine der ios_base::seekdir-Enumerationen.
Rückgabewert
Ein Verweis auf das basic_ostream-Objekt.
Bemerkungen
Wenn fehlerfalse
ist, ruft die erste Memberfunktion newpos =rdbuf-pubseekpos>(_Pos) für ein pos_type
temporäres Objekt newpos
auf. Wenn fail
falsch ist, ruft die zweite Funktion newpos = rdbuf-pubseekoff>(_Off, _Way) auf. Falls ()newpos == (off_type
)(-1) (off_type
der Positionierungsvorgang fehlschlägt), ruft die Funktion einen Fehler auf.setstate(failbit). Beide Funktionen geben *dies 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: explizit sentry(basic_ostream Elem, Tr>& _Ostr<); operator bool() const; ~sentry(); };
Bemerkungen
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 von ostr.good
in status
. Ein späterer Aufruf, um operator bool
diesen gespeicherten Wert zu liefern.
Wenn uncaught_exception
rückgaben false
und flagsunitbuf& nonzero sind, ruft der Destructor 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.
Bemerkungen
Die Memberfunktion ruft basic_ios::Swap(right)
auf, um den Inhalt dieses Objekts für den Inhalt des Rechts zu austauschen.
basic_ostream::tellp
Meldet die Position im Ausgabestream.
pos_type tellp();
Rückgabewert
Position im Ausgabestream.
Bemerkungen
Wenn fehlerfalse
ist, 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.
Bemerkungen
Die nicht formatierte 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.
Weitere Informationen
Threadsicherheit in der C++-Standardbibliothek
iostream-Programmierung
iostreams-Konventionen