basic_ostream (Clase)
Esta plantilla de clase describe un objeto que controla la inserción de elementos y objetos codificados en un búfer de flujo con elementos de tipo Elem
, también conocidos como char_type, cuyos rasgos de caracteres están determinados por la clase Tr
, también conocida como traits_type.
Sintaxis
template <class Elem, class Tr = char_traits<Elem>>
class basic_ostream : virtual public basic_ios<Elem, Tr>
Parámetros
Elem
char_type
.
Tr
El carácter traits_type
.
Comentarios
La mayoría de las funciones miembro que sobrecargan operador<< son funciones de salida con formato. Siguen el patrón:
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);
Otras dos funciones miembro son funciones de salida sin formato. Siguen el patrón:
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);
Ambos grupos de funciones llaman a setstate(badbit) si detectan un error al insertar elementos.
Un objeto de clase basic_istream<Elem, Tr> solo almacena un objeto base público virtual de clase basic_ios<Elem, Tr>.
Ejemplo
Vea el ejemplo de basic_ofstream (Clase) para obtener más información sobre los flujos de salida.
Constructores
Constructor | Descripción |
---|---|
basic_ostream | Construye un objeto basic_ostream . |
Funciones miembro
Función de miembro | Descripción |
---|---|
flush | Vacía el búfer. |
put | Coloca un carácter en una secuencia. |
seekp | Restablece la posición en el flujo de salida. |
sentry | La clase anidada describe un objeto cuya declaración estructura las funciones de salida con y sin formato. |
swap | Cambia los valores de este objeto basic_ostream por los del objeto basic_ostream proporcionado. |
tellp | Notifica la posición en el flujo de salida. |
write | Coloca los caracteres en una secuencia. |
Operadores
Operador | Descripción |
---|---|
operator= | Asigna el valor del parámetro de objeto basic_ostream a este objeto. |
operator<< | Escribe en la secuencia. |
Requisitos
Encabezado:<ostream>
Espacio de nombres: std
basic_ostream::basic_ostream
Construye un objeto basic_ostream
.
explicit basic_ostream(
basic_streambuf<Elem, Tr>* strbuf,
bool _Isstd = false);
basic_ostream(basic_ostream&& right);
Parámetros
strbuf
Objeto de tipo basic_streambuf.
_Isstd
true
si se trata de un flujo estándar; de lo contrario, false
.
right
Referencia a un valor R a un objeto de tipo basic_ostream
.
Comentarios
El primer constructor inicializa la clase base al llamar a init(strbuf
). El segundo constructor inicializa la clase base al llamar a basic_ios::move(right)
.
Ejemplo
Vea el ejemplo de basic_ofstream::basic_ofstream para obtener más información sobre los flujos de salida.
basic_ostream::flush
Vacía el búfer.
basic_ostream<Elem, Tr>& flush();
Valor devuelto
Referencia al objeto basic_ostream.
Comentarios
Si rdbuf no es un puntero nulo, la función llama a rdbuf>pubsync. Si eso devuelve -1, la función llama a setstate(badbit). Devuelve *this.
Ejemplo
// basic_ostream_flush.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
using namespace std;
cout << "test";
cout.flush();
}
test
basic_ostream::operator<<
Escribe en la secuencia.
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);
Parámetros
Pfn
Puntero de función.
strbuf
Puntero a un objeto stream_buf
.
val
Elemento que se va a escribir en el flujo.
Valor devuelto
Referencia al objeto basic_ostream.
Comentarios
El encabezado <ostream> también define varios operadores de inserción globales. Para obtener más información, vea operator<<.
La primera función miembro garantiza que una expresión con el formato ostr << endl
llame a endl(ostr) y luego devuelva *this. Las funciones segunda y tercera garantizan que los demás manipuladores, como hex, se comporten de forma similar. Las funciones restantes son todas funciones de salida con formato.
La función
basic_ostream<Elem, Tr>& operator<<(basic_streambuf<Elem, Tr>* strbuf);
extrae elementos destrbuf, si strbuf no es un puntero nulo y los inserta. La extracción se detiene al final del archivo o si una extracción inicia una excepción (que se vuelve a iniciar). También se detiene, sin extraer el elemento en cuestión, si se produce un error en una inserción. Si la función no inserta ningún elemento, o si una extracción inicia una excepción, la función llama a setstate(failbit). En cualquier caso, la función devuelve *this.
La función
basic_ostream<Elem, Tr>& operator<<(bool val);
convierte _Val
en un campo booleano y lo inserta al llamar a use_facet<num_put<Elem, OutIt>(
getloc). put(OutIt(rdbuf), *this, getloc
, val). Aquí, OutIt
se define como ostreambuf_iterator<Elem, Tr>. La función devuelve *this.
Funciones
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);
convierten val en un campo numérico y lo insertan al llamar a use_facet<num_put<Elem, OutIt>(getloc
). put(OutIt(rdbuf
), *this, getloc
, val). Aquí, OutIt se define como ostreambuf_iterator<Elem, Tr>. La función devuelve *this.
Funciones
basic_ostream<Elem, Tr>& operator<<(float val);
basic_ostream<Elem, Tr>& operator<<(double val);
basic_ostream<Elem, Tr>& operator<<(long double val);
convierten val en un campo numérico y lo insertan al llamar a use_facet<num_put<Elem, OutIt>(getloc
). put(OutIt(rdbuf
), *this, getloc
, val). Aquí, OutIt se define como ostreambuf_iterator<Elem, Tr>. La función devuelve *this.
Ejemplo
// 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=
Asigna valores del parámetro de objeto basic_ostream
proporcionado a este objeto.
basic_ostream& operator=(basic_ostream&& right);
Parámetros
right
Referencia rvalue
a un objeto basic_ostream
.
Comentarios
El operador miembro llama a swap (right)
.
basic_ostream::p ut
Coloca un carácter en una secuencia.
basic_ostream<Elem, Tr>& put(char_type _Ch);
Parámetros
_Ch
Un carácter.
Valor devuelto
Referencia al objeto basic_ostream.
Comentarios
La función de salida sin formato inserta el elemento _Ch. Devuelve *this.
Ejemplo
// 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
Restablece la posición en el flujo de salida.
basic_ostream<Elem, Tr>& seekp(pos_type _Pos);
basic_ostream<Elem, Tr>& seekp(off_type _Off, ios_base::seekdir _Way);
Parámetros
_Pos
Posición en el flujo.
_Off
Desplazamiento en relación con _Way.
_Way
Una de las enumeraciones ios_base::seekdir.
Valor devuelto
Referencia al objeto basic_ostream.
Comentarios
Si el error es false
, la primera función miembro llama a newpos = rdbuf-> pubseekpos(_Pos), para algún pos_type
objeto newpos
temporal . Si fail
es false, la segunda función llama a newpos = rdbuf- >pubseekoff(_Off, _Way). En cualquier caso, si (off_type
)newpos == (off_type
)(-1) (se produce un error en la operación de posicionamiento), la función llama a istr.setstate(failbit). Ambas funciones devuelven *this.
Ejemplo
// 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 clase anidada describe un objeto cuya declaración estructura las funciones de salida con y sin formato.
class sentry { public: explicit sentry(basic_ostream<Elem, Tr>& _Ostr); operator bool() const; ~sentry(); };
Comentarios
La clase anidada describe un objeto cuya declaración estructura las funciones de salida con y sin formato. Si ostr.good es true
y ostr.tie no es un puntero nulo, el constructor llama a ostr.tie->flush. El constructor almacena el valor devuelto por ostr.good
en status
. Una llamada posterior a operator bool
devuelve este valor almacenado.
Si uncaught_exception
devuelve false
y marcas y unitbuf es distinto de cero, el destructor llama a flush.
basic_ostream::swap
Cambia los valores de este objeto basic_ostream
por los del objeto basic_ostream
proporcionado.
void swap(basic_ostream& right);
Parámetros
right
Referencia a un objeto basic_ostream
.
Comentarios
La función miembro llama a basic_ios::swap(right)
para cambiar el contenido de este objeto por el de right.
basic_ostream::tellp
Notifica la posición en el flujo de salida.
pos_type tellp();
Valor devuelto
Posición en el flujo de salida.
Comentarios
Si fail es false
, la función miembro devuelve rdbuf-> pubseekoff(0, cur
, in). De lo contrario, devuelve pos_type
(-1).
Ejemplo
Vea seekp para obtener un ejemplo de uso de tellp
.
basic_ostream::write
Coloca caracteres en un flujo.
basic_ostream<Elem, Tr>& write(const char_type* str, streamsize count);
Parámetros
count
Recuento de caracteres que se van a colocar en el flujo.
str
Caracteres que se van a colocar en el flujo.
Valor devuelto
Referencia al objeto basic_ostream.
Comentarios
La función de salida sin formato inserta la secuencia de elementos de conteo , que comienza en str.
Ejemplo
Vea streamsize para obtener un ejemplo de uso de write
.
Consulte también
Seguridad para subprocesos en la biblioteca estándar de C++
Programación con iostream
Convenciones de iostreams