Classe basic_ostream
Questo modello di classe descrive un oggetto che controlla l'inserimento di elementi e oggetti codificati in un buffer di flusso con elementi di tipo Elem
, noti anche come char_type, i cui tratti di carattere sono determinati dalla classe Tr
, noto anche come traits_type.
Sintassi
template <class Elem, class Tr = char_traits<Elem>>
class basic_ostream : virtual public basic_ios<Elem, Tr>
Parametri
Elem
Un oggetto char_type
.
Tr
Il carattere traits_type
.
Osservazioni:
La maggior parte delle funzioni membro che l'operatore di<< overload sono funzioni di output formattate. Le funzioni seguono questo schema:
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);
Due altre funzioni membro sono funzioni di output formattate. Le funzioni seguono questo schema:
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);
Entrambi i gruppi di funzioni chiamano setstate(badbit) se riscontrano un errore durante l'inserimento di elementi.
Oggetto della classe basic_istream<Elem, Tr> archivia solo un oggetto base pubblico virtuale di classe basic_ios<Elem, Tr.>
Esempio
Per altre informazioni sui flussi di output, vedere l'esempio per la Classe basic_ofstream.
Costruttori
Costruttore | Descrizione |
---|---|
basic_ostream | Costruisce un oggetto basic_ostream . |
Funzioni membro
Funzione membro | Descrizione |
---|---|
flush | Scarica il buffer. |
put | Inserisce un carattere in un flusso. |
seekp | Reimposta la posizione nel flusso di output. |
sentry | La classe annidata descrive un oggetto la cui dichiarazione struttura le funzioni di output formattate e quelle non formattate. |
swap | Scambia i valori in questo oggetto basic_ostream con quelli dell'oggetto basic_ostream fornito. |
tellp | Indica la posizione nel flusso di output. |
write | Inserisce i caratteri in un flusso. |
Operatori
Operatore | Descrizione |
---|---|
operator= | Assegna il valore del parametro di oggetto basic_ostream fornito a questo oggetto. |
operator<< | Scrive nel flusso. |
Requisiti
Header:<ostream>
Spazio dei nomi: std
basic_ostream::basic_ostream
Costruisce un oggetto basic_ostream
.
explicit basic_ostream(
basic_streambuf<Elem, Tr>* strbuf,
bool _Isstd = false);
basic_ostream(basic_ostream&& right);
Parametri
strbuf
Un oggetto di tipo basic_streambuf.
_Isstd
true
se si tratta di un flusso standard; in caso contrario, false
.
right
Riferimento rvalue a un oggetto di tipo basic_ostream
.
Osservazioni:
Il primo costruttore inizializza la classe base chiamando init(strbuf
). Il secondo costruttore inizializza la classe base chiamando basic_ios::move(right)
.
Esempio
Per altre informazioni sui flussi di output, vedere l'esempio per basic_ofstream::basic_ofstream.
basic_ostream::flush
Scarica il buffer.
basic_ostream<Elem, Tr>& flush();
Valore restituito
Un riferimento all'oggetto basic_ostream.
Osservazioni:
Se rdbuf non è un puntatore Null, la funzione chiama rdbuf-pubsync>. Se restituisce -1, la funzione chiama setstate(badbit). Restituisce *this.
Esempio
// basic_ostream_flush.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
using namespace std;
cout << "test";
cout.flush();
}
test
basic_ostream::operator<<
Scrive nel flusso.
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);
Parametri
Pfn
Un puntatore di funzione.
strbuf
Puntatore a un oggetto stream_buf
.
val
Un elemento da scrivere nel flusso.
Valore restituito
Un riferimento all'oggetto basic_ostream.
Osservazioni:
L'intestazione <ostream> definisce anche diversi operatori di inserimento globali. Per altre informazioni, vedere l'argomento relativo all'operatore<<.
La prima funzione membro garantisce che un'espressione del modulo chiami endl(ostr)e quindi restituisca *this.ostr << endl
La seconda e la terza funzione garantiscono che gli altri manipolatori, ad esempio hex, si comportino in modo analogo. Le funzioni rimanenti sono tutte funzioni di output formattato.
Funzione
basic_ostream<Elem, Tr>& operator<<(basic_streambuf<Elem, Tr>* strbuf);
estrae gli elementi da strbuf, se strbuf non è un puntatore Null e li inserisce. L'estrazione si interrompe alla fine del file o se un'estrazione genera un'eccezione (che viene generata nuovamente). L'estrazione si interrompe, senza estrazione dell'elemento, se un inserimento ha esito negativo. Se la funzione non inserisce alcun elemento o se un'estrazione genera un'eccezione, la funzione chiama setstate(failbit). In ogni caso, la funzione restituisce *this.
Funzione
basic_ostream<Elem, Tr>& operator<<(bool val);
converte _Val
in un campo booleano e lo inserisce chiamando use_facet<num_put<Elem, OutIt(
>getloc). put(OutIt(rdbuf), *this, getloc
, val). Qui, OutIt
è definito come ostreambuf_iterator<Elem, Tr.> La funzione restituisce *this.
Funzioni
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);
ogni valore converte val in un campo numerico e lo inserisce chiamando use_facet<num_put<Elem, OutIt>(getloc
). put(OutIt(rdbuf
), *this, getloc
, val). Qui OutIt è definito come ostreambuf_iterator<Elem, Tr>. La funzione restituisce *this.
Funzioni
basic_ostream<Elem, Tr>& operator<<(float val);
basic_ostream<Elem, Tr>& operator<<(double val);
basic_ostream<Elem, Tr>& operator<<(long double val);
ogni valore converte val in un campo numerico e lo inserisce chiamando use_facet<num_put<Elem, OutIt(). put(OutIt>(rdbuf
getloc
), *this, getloc
, val). Qui OutIt è definito come ostreambuf_iterator<Elem, Tr>. La funzione restituisce *this.
Esempio
// 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=
Assegna i valori per il parametro dell'oggetto basic_ostream
specificato in questo oggetto.
basic_ostream& operator=(basic_ostream&& right);
Parametri
right
Riferimento rvalue
a un oggetto basic_ostream
.
Osservazioni:
L'operatore membro chiama swap (right)
.
basic_ostream::p ut
Inserisce un carattere in un flusso.
basic_ostream<Elem, Tr>& put(char_type _Ch);
Parametri
_Ch
Carattere.
Valore restituito
Un riferimento all'oggetto basic_ostream.
Osservazioni:
La funzione di output non formattata inserisce l'elemento _Ch. Restituisce *this.
Esempio
// 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
Reimposta la posizione nel flusso di output.
basic_ostream<Elem, Tr>& seekp(pos_type _Pos);
basic_ostream<Elem, Tr>& seekp(off_type _Off, ios_base::seekdir _Way);
Parametri
_Pos
La posizione all'interno del flusso.
_Spento
Offset relativo a _Way.
_Maniera
Una delle enumerazioni ios_base::seekdir.
Valore restituito
Un riferimento all'oggetto basic_ostream.
Osservazioni:
Se fail è false
, la prima funzione membro chiama newpos = rdbuf-> pubseekpos(_Pos), per alcuni pos_type
oggetti newpos
temporanei . Se fail
è false, la seconda funzione chiama newpos = rdbuf-> pubseekoff(_Off, _Way). In entrambi i casi, se (off_type
)newpos == (off_type
)(-1) (l'operazione di posizionamento ha esito negativo), la funzione chiama istr.setstate(failbit). Entrambe le funzioni restituiscono *this.
Esempio
// 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
La classe annidata descrive un oggetto la cui dichiarazione struttura le funzioni di output formattate e quelle non formattate.
class sentry { public: explicit sentry(basic_ostream<Elem, Tr>& _Ostr); operator bool() const; ~sentry(); };
Osservazioni:
La classe annidata descrive un oggetto la cui dichiarazione struttura le funzioni di output formattate e quelle non formattate. Se ostr.good è true
e ostr.tie non è un puntatore Null, il costruttore chiama ostr.tie-flush>. Il costruttore archivia quindi il valore restituito da ostr.good
in status
. Una chiamata successiva per recapitare operator bool
questo valore archiviato.
Se restituisce e contrassegna e unitbuf è diverso da zero, il distruttore chiama flush.false
uncaught_exception
basic_ostream::swap
Scambia i valori in questo oggetto basic_ostream
con quelli dell'oggetto basic_ostream
specificato.
void swap(basic_ostream& right);
Parametri
right
Riferimento a un oggetto basic_ostream
.
Osservazioni:
La funzione membro chiama basic_ios::swap(right)
per scambiare il contenuto di questo oggetto per il contenuto di destra.
basic_ostream::tellp
Indica la posizione nel flusso di output.
pos_type tellp();
Valore restituito
La posizione nel flusso di output.
Osservazioni:
Se fail è false
, la funzione membro restituisce rdbuf-> pubseekoff(0, cur
, in). In caso contrario, restituisce pos_type
(-1).
Esempio
Vedere seekp per un esempio in cui viene usato tellp
.
basic_ostream::write
Inserisce i caratteri in un flusso.
basic_ostream<Elem, Tr>& write(const char_type* str, streamsize count);
Parametri
count
Numero di caratteri da inserire nel flusso.
str
Caratteri da inserire nel flusso.
Valore restituito
Un riferimento all'oggetto basic_ostream.
Osservazioni:
La funzione di output non formattata inserisce la sequenza di elementi count a partire da str.
Esempio
Vedere streamsize per un esempio in cui viene usato write
.
Vedi anche
Thread Safety in the C++ Standard Library (Sicurezza dei thread nella libreria standard C++)
Programmazione iostream
iostreams Conventions (Convenzioni di iostream)