basic_ostream – třída
Tato šablona třídy popisuje objekt, který řídí vkládání prvků a kódované objekty do vyrovnávací paměti datového proudu s prvky typu Elem
, označované také jako char_type, jejichž znakové vlastnosti jsou určeny třídou Tr
, také známé jako traits_type.
Syntaxe
template <class Elem, class Tr = char_traits<Elem>>
class basic_ostream : virtual public basic_ios<Elem, Tr>
Parametry
Elem
Úloha char_type
.
Tr
traits_type
Znak .
Poznámky
Většina členských funkcí, které operátor přetížení jsou << formátované výstupní funkce. Řídí se vzorem:
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);
Dvě další členské funkce jsou neformátované výstupní funkce. Řídí se vzorem:
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);
Obě skupiny funkcí volají setstate(badbit), pokud při vkládání prvků dojde k selhání.
Objekt třídy basic_istream<Elem, Tr> ukládá pouze virtuální veřejný základní objekt třídy basic_ios<Elem, Tr.>
Příklad
Další informace o výstupních datových proudech najdete v příkladu třídy basic_ofstream .
Konstruktory
Konstruktor | Popis |
---|---|
basic_ostream | basic_ostream Vytvoří objekt. |
Členské funkce
Členová funkce | Popis |
---|---|
spláchnout | Vyprázdní vyrovnávací paměť. |
dát | Vloží znak do datového proudu. |
seekp | Obnoví pozici ve výstupním datovém proudu. |
hlídka | Vnořená třída popisuje objekt, jehož deklarace strukturuje formátované výstupní funkce a neformátované výstupní funkce. |
vyměnit | Vymění hodnoty tohoto basic_ostream objektu basic_ostream pro zadané objekty. |
tellp | Pozice sestav ve výstupním datovém proudu |
write | Vloží znaky do datového proudu. |
Operátory
Operátor | Popis |
---|---|
operator= | Přiřadí k tomuto objektu hodnotu zadaného basic_ostream parametru objektu. |
operator<< | Zapisuje se do datového proudu. |
Požadavky
Header:<ostream>
Namespace: std
basic_ostream::basic_ostream
basic_ostream
Vytvoří objekt.
explicit basic_ostream(
basic_streambuf<Elem, Tr>* strbuf,
bool _Isstd = false);
basic_ostream(basic_ostream&& right);
Parametry
strbuf
Objekt typu basic_streambuf.
_Isstd
true
pokud se jedná o standardní datový proud; v opačném případě . false
Vpravo
Odkaz rvalue na objekt typu basic_ostream
.
Poznámky
První konstruktor inicializuje základní třídu voláním init(strbuf
). Druhý konstruktor inicializuje základní třídu voláním basic_ios::move(right)
.
Příklad
Další informace o výstupních datových proudech najdete v příkladu pro basic_ofstream::basic_ofstream .
basic_ostream::flush
Vyprázdní vyrovnávací paměť.
basic_ostream<Elem, Tr>& flush();
Návratová hodnota
Odkaz na objekt basic_ostream.
Poznámky
Pokud rdbuf není nulový ukazatel, funkce volá rdbuf-pubsync>. Pokud vrátí hodnotu -1, funkce volá setstate(badbit). Vrátí *to.
Příklad
// basic_ostream_flush.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
using namespace std;
cout << "test";
cout.flush();
}
test
basic_ostream::operator<<
Zapisuje se do datového proudu.
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);
Parametry
Pfn
Ukazatel funkce.
strbuf
Ukazatel na stream_buf
objekt.
Val
Prvek pro zápis do datového proudu.
Návratová hodnota
Odkaz na objekt basic_ostream.
Poznámky
Hlavička <ostream> také definuje několik globálních operátorů vložení. Další informace naleznete v operátoru<<.
První členská funkce zajišťuje, že výraz volání formuláře ostr << endl
endl(ostr) a poté vrátí *this. Druhé a třetí funkce zajišťují, aby se ostatní manipulátory, jako je šestnáctkový, chovaly podobně. Zbývající funkce jsou všechny formátované výstupní funkce.
Funkci
basic_ostream<Elem, Tr>& operator<<(basic_streambuf<Elem, Tr>* strbuf);
extrahuje prvky z strbuf, pokud strbuf není nulový ukazatel a vloží je. Extrakce se zastaví na konci souboru nebo pokud extrahování vyvolá výjimku (která se znovu vyvolá). Zastaví se také bez extrahování daného prvku, pokud se vložení nezdaří. Pokud funkce vloží žádné prvky nebo pokud extrahování vyvolá výjimku, funkce volá setstate(failbit). V každém případě funkce vrátí *this.
Funkci
basic_ostream<Elem, Tr>& operator<<(bool val);
_Val
převede na logické pole a vloží ho voláním use_facet<num_put<Elem, OutIt(
>getloc). put(OutIt(rdbuf), *this, getloc
, val). OutIt
Zde je definován jako ostreambuf_iterator<Elem, Tr.> Funkce vrátí *this.
Funkce
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);
každý převede hodnotu na číselné pole a vloží ho voláním use_facet<num_put<Elem, OutIt>(getloc
). put(OutIt(rdbuf
), *this, getloc
, val). Zde je OutIt definován jako ostreambuf_iterator<Elem, Tr>. Funkce vrátí *this.
Funkce
basic_ostream<Elem, Tr>& operator<<(float val);
basic_ostream<Elem, Tr>& operator<<(double val);
basic_ostream<Elem, Tr>& operator<<(long double val);
každý převede hodnotu na číselné pole a vloží ji voláním use_facet<num_put<Elem, OutIt(getloc
). put(OutIt>(rdbuf
), *this, getloc
, val). Zde je OutIt definován jako ostreambuf_iterator<Elem, Tr>. Funkce vrátí *this.
Příklad
// 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=
Přiřadí k tomuto objektu hodnoty zadaného basic_ostream
parametru objektu.
basic_ostream& operator=(basic_ostream&& right);
Parametry
Vpravo
Odkaz rvalue
na basic_ostream
objekt.
Poznámky
Operátor člena volá swap (right)
.
basic_ostream::p ut
Vloží znak do datového proudu.
basic_ostream<Elem, Tr>& put(char_type _Ch);
Parametry
_Ch
Znak.
Návratová hodnota
Odkaz na objekt basic_ostream.
Poznámky
Neformátovaná výstupní funkce vloží prvek _Ch. Vrátí *to.
Příklad
// 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
Resetovat pozici ve výstupním datovém proudu
basic_ostream<Elem, Tr>& seekp(pos_type _Pos);
basic_ostream<Elem, Tr>& seekp(off_type _Off, ios_base::seekdir _Way);
Parametry
_Pos
Pozice v datovém proudu.
_Pryč
Posun vzhledem k _Way.
_Cesta
Jeden z ios_base::seekdir výčty.
Návratová hodnota
Odkaz na objekt basic_ostream.
Poznámky
Pokud je false
chyba , první člen funkce volá newpos = rdbuf- >pubseekpos(_Pos), pro nějaký pos_type
dočasný objekt newpos
. Pokud fail
je false, druhá funkce volá newpos = rdbuf- >pubseekoff(_Off; _Way). V obou případech pokud (off_type
)newpos == ()(off_type
)(-1) (operace umístění selže), pak funkce volá istr.setstate(failbit). Obě funkce vrátí *this.
Příklad
// 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
Vnořená třída popisuje objekt, jehož deklarace strukturuje formátované výstupní funkce a neformátované výstupní funkce.
class sentry { public: explicit sentry(basic_ostream<Elem, Tr>& _Ostr); operator bool() const; ~sentry(); };
Poznámky
Vnořená třída popisuje objekt, jehož deklarace strukturuje formátované výstupní funkce a neformátované výstupní funkce. Pokud ostr.dobrá je true
a ostr.tie není nulový ukazatel, konstruktor volá ostr.tie-flush>. Konstruktor pak uloží hodnotu vrácenou ostr.good
v status
. Pozdější volání, které operator bool
tuto uloženou hodnotu doručí.
Pokud uncaught_exception
jsou návraty false
a příznaky & unitbuf nenulové, destruktor volá vyprázdnění.
basic_ostream::swap
Vymění hodnoty tohoto basic_ostream
objektu pro hodnoty poskytnutého basic_ostream
objektu .
void swap(basic_ostream& right);
Parametry
Vpravo
Odkaz na basic_ostream
objekt.
Poznámky
Členová funkce volá basic_ios::swap(right)
za účelem výměny obsahu tohoto objektu pro obsah práva.
basic_ostream::tellp
Umístění sestavy ve výstupním datovém proudu
pos_type tellp();
Návratová hodnota
Pozice ve výstupním datovém proudu
Poznámky
Pokud je false
chyba, vrátí členová funkce rdbuf-> pubseekoff(0, cur
in). V opačném případě se vrátí pos_type
(-1).
Příklad
Podívejte se na hledání příkladu pomocí příkazu tellp
.
basic_ostream::write
Vložte znaky do datového proudu.
basic_ostream<Elem, Tr>& write(const char_type* str, streamsize count);
Parametry
count
Počet znaků, které se mají vložit do datového proudu
Str
Znaky, které se mají vložit do datového proudu.
Návratová hodnota
Odkaz na objekt basic_ostream.
Poznámky
Neformátovaná výstupní funkce vloží sekvenci prvků počtu začínajících na str.
Příklad
Podívejte se na streamsize příkladu pomocí write
.
Viz také
Bezpečný přístup z více vláken ve standardní knihovně C++
iostream – programování
iostreams – konvence