Clase basic_ios
La plantilla de clase describe las funciones de almacenamiento y miembro comunes tanto a los flujos de entrada (de la plantilla de clase basic_istream
) como a los de salida (de la plantilla de clase basic_ostream
) que dependen de los parámetros de plantilla. (La clase ios_base
describe lo que es común y no depende de los parámetros de plantilla). Un objeto de clase basic_ios<class Elem, class Traits>
ayuda a controlar un flujo con elementos del tipo Elem
, cuyos rasgos de caracteres están determinados por la clase Traits
.
Sintaxis
template <class Elem, class Traits>
class basic_ios : public ios_base
Parámetros
Elem
Tipo de carácter.
Traits
Tipo que proporciona información sobre el tipo de carácter, el valor predeterminado es char_traits < Elem >
.
Comentarios
Un objeto de clase basic_ios<class Elem, class Traits>
almacena:
Puntero a un objeto de tipo
basic_istream<Elem, Traits>
.Puntero de flujo de búfer a un objeto de tipo
basic_streambuf<Elem, Traits >
.Información de estado de flujo en un objeto base de tipo
ios_base
.Un carácter de relleno en un objeto de tipo
char_type
.
Para obtener más información, vea basic_istream
y basic_streambuf
.
Constructores
Constructor | Descripción |
---|---|
basic_ios |
Construye la clase basic_ios . |
Typedefs
Nombre de tipo | Descripción |
---|---|
char_type |
Sinónimo del parámetro de plantilla Elem . |
int_type |
Sinónimo de Traits::int_type . |
off_type |
Sinónimo de Traits::off_type . |
pos_type |
Sinónimo de Traits::pos_type . |
traits_type |
Sinónimo del parámetro de plantilla Traits . |
Funciones miembro
Función de miembro | Descripción |
---|---|
bad |
Indica una pérdida de integridad del búfer de secuencia. |
clear |
Borra todas las marcas de error. |
copyfmt |
Copia las marcas de una secuencia a otra. |
eof |
Indica si se ha alcanzado el extremo de una secuencia. |
exceptions |
Indica qué excepciones iniciará la secuencia. |
fail |
Indica un error al extraer un campo válido de una secuencia. |
fill |
Especifica o devuelve el carácter que se usará si el texto no tiene el mismo ancho que la secuencia. |
good |
Indica que la secuencia está en buen estado. |
imbue |
Cambia la configuración regional. |
init |
Llamada por constructores basic_ios . |
move |
Mueve todos los valores, excepto el puntero al búfer de secuencia, desde el parámetro hasta el objeto actual. |
narrow |
Busca el carácter equivalente a un determinado char_type . |
rdbuf |
Redirige la secuencia al búfer especificado. |
rdstate |
Lee el estado de bits de las marcas. |
set_rdbuf |
Asigna un búfer de secuencia para que sea el búfer de lectura de este objeto de secuencia. |
setstate |
Establece marcas adicionales. |
swap |
Cambia los valores de este objeto basic_ios por los de otro objeto basic_ios . No se intercambian los punteros a los búferes de secuencia. |
tie |
Se asegura de que una secuencia se procese antes que otra. |
widen |
Busca el char_type equivalente a un determinado carácter. |
Operadores
Operador | Descripción |
---|---|
explicit operator bool |
Permite el uso de un objeto basic_ios como un bool . La conversión automática de tipo está deshabilitada para evitar efectos secundarios típicos no deseados. |
operator void * |
Indica si la secuencia sigue siendo aceptable. |
operator! |
Indica si la secuencia no es inaceptable. |
Requisitos
Encabezado: <ios>
Espacio de nombres: std
basic_ios::bad
Indica una pérdida de integridad del búfer de flujo.
bool bad() const;
Valor devuelto
true
si rdstate & badbit
es distinto de cero; en caso contrario, false
.
Para más información sobre badbit
, consulte ios_base::iostate
.
Ejemplo
// basic_ios_bad.cpp
// compile with: /EHsc
#include <iostream>
int main( void )
{
using namespace std;
bool b = cout.bad( );
cout << boolalpha;
cout << b << endl;
b = cout.good( );
cout << b << endl;
}
basic_ios::basic_ios
Construye la clase basic_ios
.
explicit basic_ios(basic_streambuf<Elem, Traits>* sb);
basic_ios();
Parámetros
sb
Búfer estándar para almacenar elementos de entrada o salida.
Comentarios
El primer constructor inicializa sus objetos miembro al llamar a init(_ Sb)
. El segundo constructor (protegido) deja sus objetos miembro sin inicializar. Una llamada posterior a init
debe inicializar el objeto para que se pueda destruir con seguridad.
basic_ios::char_type
Sinónimo del parámetro de plantilla Elem
.
typedef Elem char_type;
basic_ios::clear
Borra todas las marcas de error.
void clear(iostate state = goodbit, bool reraise = false);
void clear(io_state state);
Parámetros
state
(Opcional) Las marcas que quiere establecer después de borrar todas las marcas. Tiene como valor predeterminado goodbit
.
reraise
(Opcional) Especifica si la excepción debe volver a generarse. El valor predeterminado es false
(no volverá a generar la excepción).
Comentarios
Las marcas son goodbit
, failbit
, eofbit
y badbit
. Prueba de estas marcas con good
, bad
, eof
y fail
La función miembro reemplaza la información de estado de la secuencia almacenada por:
state | (rdbuf != 0 goodbit : badbit)
Si state&exceptions
es distinto de cero, inicia un objeto de clase failure
.
Para obtener más información, vea rdbuf
y exceptions
.
Ejemplo
Vea rdstate
y getline
para obtener ejemplos con clear
.
basic_ios::copyfmt
Copia las marcas de una secuencia a otra.
basic_ios<Elem, Traits>& copyfmt(
const basic_ios<Elem, Traits>& right);
Parámetros
right
Flujo cuyas marcas se quieren copiar.
Valor devuelto
El objeto this
del flujo en el que se están copiando las marcas.
Comentarios
La función miembro informa del evento de devolución de llamada erase_event
. Luego copia de right
a *this
el carácter de relleno, el puntero de relleno y la información de formato. Antes de modificar la máscara de excepción, notifica el evento de devolución de llamada copyfmt_event
. Si, una vez que la copia está completa, state&exceptions
es distinto de cero, la función llama realmente a clear
con el argumento rdstate
. Devuelve *this
.
Ejemplo
// basic_ios_copyfmt.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>
int main( )
{
using namespace std;
ofstream x( "test.txt" );
int i = 10;
x << showpos;
cout << i << endl;
cout.copyfmt( x );
cout << i << endl;
}
basic_ios::eof
Indica si se ha alcanzado el extremo de una secuencia.
bool eof() const;
Valor devuelto
true
si se ha alcanzado el fin del flujo; de lo contrario, false
.
Comentarios
La función miembro devuelve true
si rdstate
& eofbit
no es cero. Para más información sobre eofbit
, consulte ios_base::iostate
.
Ejemplo
// basic_ios_eof.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>
using namespace std;
int main( int argc, char* argv[] )
{
fstream fs;
int n = 1;
fs.open( "basic_ios_eof.txt" ); // an empty file
cout << boolalpha
cout << fs.eof() << endl;
fs >> n; // Read the char in the file
cout << fs.eof() << endl;
}
basic_ios::exceptions
Indica qué excepciones iniciará la secuencia.
iostate exceptions() const;
void exceptions(iostate Newexcept);
void exceptions(io_state Newexcept);
Parámetros
Newexcept
Marcas que quiere que inicie una excepción.
Valor devuelto
Marcas especificadas actualmente para iniciar una excepción para el flujo.
Comentarios
La primera función miembro devuelve la máscara de excepción almacenada. La segunda función miembro almacena _Except
en la máscara de excepción y devuelve su anterior valor almacenado. Al almacenar una nueva máscara de excepción, se puede iniciar una excepción como la llamada clear
(rdstate
).
Ejemplo
// basic_ios_exceptions.cpp
// compile with: /EHsc /GR
#include <iostream>
int main( )
{
using namespace std;
cout << cout.exceptions( ) << endl;
cout.exceptions( ios::eofbit );
cout << cout.exceptions( ) << endl;
try
{
cout.clear( ios::eofbit ); // Force eofbit on
}
catch ( exception &e )
{
cout.clear( );
cout << "Caught the exception." << endl;
cout << "Exception class: " << typeid(e).name() << endl;
cout << "Exception description: " << e.what() << endl;
}
}
0
1
Caught the exception.
Exception class: class std::ios_base::failure
Exception description: ios_base::eofbit set
basic_ios::fail
Indica un error al extraer un campo válido de una secuencia.
bool fail() const;
Valor devuelto
true
si rdstate & (badbit|failbit)
es distinto de cero; en caso contrario, false
.
Para más información sobre failbit
, consulte ios_base::iostate
.
Ejemplo
// basic_ios_fail.cpp
// compile with: /EHsc
#include <iostream>
int main( void )
{
using namespace std;
bool b = cout.fail( );
cout << boolalpha;
cout << b << endl;
}
basic_ios::fill
Especifica o devuelve el carácter que se usará si el texto no tiene el mismo ancho que la secuencia.
char_type fill() const;
char_type fill(char_type Char);
Parámetros
Char
Carácter que se quiere como carácter de relleno.
Valor devuelto
Carácter de relleno actual.
Comentarios
La primera función miembro devuelve el carácter de relleno almacenado. La segunda función miembro almacena Char
en el carácter de relleno y devuelve su anterior valor almacenado.
Ejemplo
// basic_ios_fill.cpp
// compile with: /EHsc
#include <iostream>
#include <iomanip>
int main( )
{
using namespace std;
cout << setw( 5 ) << 'a' << endl;
cout.fill( 'x' );
cout << setw( 5 ) << 'a' << endl;
cout << cout.fill( ) << endl;
}
a
xxxxa
x
basic_ios::good
Indica que la secuencia está en buen estado.
bool good() const;
Valor devuelto
true
si rdstate == goodbit
(sin marcas de estado establecidas); de lo contrario, false
.
Para más información sobre goodbit
, consulte ios_base::iostate
.
Ejemplo
Vea basic_ios::bad
para obtener un ejemplo en el que se usa good
.
basic_ios::imbue
Cambia la configuración regional.
locale imbue(const locale& Loc);
Parámetros
Loc
Cadena de configuración regional.
Valor devuelto
Configuración regional anterior.
Comentarios
Si rdbuf
no es un puntero NULL
, la función miembro llama
rdbuf-> pubimbue(_ Loc)
En cualquier caso, devuelve ios_base::imbue(_ Loc)
.
Para obtener más información, vea pubimbue
y ios_base::imbue
.
Ejemplo
// basic_ios_imbue.cpp
// compile with: /EHsc
#include <iostream>
#include <locale>
int main( )
{
using namespace std;
cout.imbue( locale( "french_france" ) );
double x = 1234567.123456;
cout << x << endl;
}
basic_ios::init
Llamada por constructores basic_ios
.
void init(basic_streambuf<Elem,Traits>* _Sb, bool _Isstd = false);
Parámetros
_Sb
Búfer estándar para almacenar elementos de entrada o salida.
_Isstd
Especifica si se trata de un flujo estándar.
Comentarios
La función miembro almacena valores en todos los objetos miembro, de modo que:
rdbuf
devuelve_Sb
.tie
devuelve un punteroNULL
.rdstate
devuelvegoodbit
si_Sb
es distinto de cero; de lo contrario, devuelvebadbit
.exceptions
devuelvegoodbit
.flags
devuelveskipws | dec
. Para obtener más información, veaskipws
ydec
.width
devuelve 0.precision
devuelve 6.fill
devuelve el carácter de espacio.getloc
devuelvelocale::classic
.iword
devuelve cero, ypword
devuelve un punteroNULL
para todos los valores de argumento.
basic_ios::int_type
Sinónimo de traits_type::int_type
.
typedef typename traits_type::int_type int_type;
basic_ios::move
Mueve todos los valores, excepto el puntero al búfer de secuencia, desde el parámetro hasta el objeto actual.
void move(basic_ios&& right);
Parámetros
right
Objeto ios_base
cuyos valores se van a mover.
Comentarios
La función miembro protegida mueve todos los valores almacenados en right
a *this
, excepto el stream buffer pointer
almacenado, que no cambia en right
y se establece en un puntero NULL
en *this
. El tie pointer
almacenado está establecido en un puntero NULL
en right
.
basic_ios::narrow
Busca el carácter equivalente a un determinado char_type
.
char narrow(char_type Char, char Default = '\0') const;
Parámetros
Char
Objeto char
que se va a convertir.
Default
char
que se quiere que se devuelva si no se encuentra ningún equivalente.
Valor devuelto
char
equivalente a un determinado char_type
.
Comentarios
La función miembro devuelve use_facet<ctype<E>>(getloc()).narrow(Char, Default)
.
Para obtener más información, vea use_facet
y getloc
.
Ejemplo
// basic_ios_narrow.cpp
// compile with: /EHsc
#include <ios>
#include <iostream>
#include <wchar.h>
int main( )
{
using namespace std;
wchar_t *x = L"test";
char y[10];
cout << x[0] << endl;
wcout << x << endl;
y[0] = wcout.narrow( x[0] );
cout << y[0] << endl;
}
basic_ios::off_type
Sinónimo de traits_type::off_type
.
typedef typename traits_type::off_type off_type;
basic_ios::operator void *
Indica si la secuencia sigue siendo aceptable.
operator void *() const;
Valor devuelto
El operador devuelve un puntero NULL
solo si fail
.
Ejemplo
// basic_ios_opgood.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
using namespace std;
cout << (bool)(&cout != 0) << endl; // Stream is still good
}
1
basic_ios::operator!
Indica si la secuencia no es inaceptable.
bool operator!() const;
Valor devuelto
Devuelve lo mismo que al llamar a basic_ios::fail
.
Ejemplo
// basic_ios_opbad.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
using namespace std;
cout << !cout << endl; // Stream is not bad
}
0
basic_ios::operator bool
Permite el uso de un objeto basic_ios
como un bool
. La conversión automática de tipo está deshabilitada para evitar efectos secundarios típicos no deseados.
explicit operator bool() const;
Comentarios
Devuelve true
si el flujo no tiene errores; de lo contrario, false
.
basic_ios::pos_type
Sinónimo de traits_type::pos_type
.
typedef typename traits_type::pos_type pos_type;
basic_ios::rdbuf
Redirige la secuencia al búfer especificado.
basic_streambuf<Elem, Traits> *rdbuf() const;
basic_streambuf<Elem, Traits> *rdbuf(
basic_streambuf<Elem, Traits>* _Sb);
Parámetros
_Sb
Flujo.
Comentarios
La primera función miembro devuelve el puntero del búfer de flujo almacenado.
La segunda función miembro almacena _Sb
en el puntero del búfer de flujo almacenado y devuelve el valor almacenado previamente.
Ejemplo
// basic_ios_rdbuf.cpp
// compile with: /EHsc
#include <ios>
#include <iostream>
#include <fstream>
int main( )
{
using namespace std;
ofstream file( "rdbuf.txt" );
streambuf *x = cout.rdbuf( file.rdbuf( ) );
cout << "test" << endl; // Goes to file
cout.rdbuf(x);
cout << "test2" << endl;
}
test2
basic_ios::rdstate
Lee el estado del error del flujo.
iostate rdstate() const;
Valor devuelto
Información de estado del flujo almacenado.
Ejemplo
// basic_ios_rdstate.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>
using namespace std;
void TestFlags( ios& x )
{
cout << ( x.rdstate( ) & ios::badbit ) << endl;
cout << ( x.rdstate( ) & ios::failbit ) << endl;
cout << ( x.rdstate( ) & ios::eofbit ) << endl;
cout << endl;
}
int main( )
{
fstream x( "c:\test.txt", ios::out );
x.clear( );
TestFlags( x );
x.clear( ios::badbit | ios::failbit | ios::eofbit );
TestFlags( x );
}
0
0
0
4
2
1
basic_ios::setstate
Establece las marcas de error de flujo especificadas (las marcas de estado de error de flujo establecidas actualmente permanecen sin cambios):
flag | Descripción |
---|---|
goodbit |
Sin errores |
badbit |
Error irrecuperable |
failbit |
Error en la operación de E/S, como un error de formato o extracción |
eofbit |
El flujo ha llegado al final del archivo |
void setstate(iostate _State);
Parámetros
_State
Marcas adicionales que se van a establecer.
Comentarios
La función miembro llama esencialmente a clear(_ state | rdstate)
.
Para obtener más información, vea clear
y rdstate
.
Ejemplo
// basic_ios_setstate.cpp
// compile with: /EHsc
#include <ios>
#include <iostream>
using namespace std;
int main( )
{
bool b = cout.bad( );
cout << b << endl; // Good
cout.clear( ios::badbit );
b = cout.bad( );
// cout.clear( );
cout << b << endl; // Is bad, good
b = cout.fail( );
cout << b << endl; // Not failed
cout.setstate( ios::failbit );
b = cout.fail( );
cout.clear( );
cout << b << endl; // Is failed, good
return 0;
}
0
1
basic_ios::set_rdbuf
Asigna un búfer de secuencia para que sea el búfer de lectura de este objeto de secuencia.
void set_rdbuf(
basic_streambuf<Elem, Tr>* strbuf)
Parámetros
strbuf
Búfer de flujo que se va a convertir en el búfer de lectura.
Comentarios
La función miembro protegida almacena strbuf
en el puntero del búfer del flujo. No llama a clear
.
basic_ios::tie
Se asegura de que una secuencia se procese antes que otra.
basic_ostream<Elem, Traits> *tie() const;
basic_ostream<Elem, Traits> *tie(
basic_ostream<Elem, Traits>* str);
Parámetros
str
Flujo.
Valor devuelto
La primera función miembro devuelve el puntero de valor equivalente almacenado. La segunda función miembro almacena str
en el puntero de valor equivalente y devuelve su anterior valor almacenado.
Comentarios
tie
provoca la sincronización de dos flujos, de modo que las operaciones de un flujo se producen una vez finalizadas las operaciones del otro.
Ejemplo
En este ejemplo, al unir cin
y cout
, se garantiza que la cadena Enter a number:
pase a la consola antes de que el propio número se extraiga de cin
. Esto elimina la posibilidad de que la cadena "Escriba un número:" siga estando en el búfer al leer el número, de modo que se asegure que el usuario realmente tiene algún mensaje al que deba responder. De manera predeterminada, cin
y cout
están unidos.
#include <ios>
#include <iostream>
int main( )
{
using namespace std;
int i;
cin.tie( &cout );
cout << "Enter a number:";
cin >> i;
}
basic_ios::traits_type
Sinónimo del parámetro de plantilla Traits
.
typedef Traits traits_type;
basic_ios::widen
Busca el char_type
equivalente a un determinado char
.
char_type widen(char Char) const;
Parámetros
Char
Carácter que se va a convertir.
Valor devuelto
Busca el char_type
equivalente a un determinado char
.
Comentarios
La función miembro devuelve use_facet<ctype<E>>(getloc).widen(Char)
.
Para obtener más información, vea use_facet
y getloc
.
Ejemplo
// basic_ios_widen.cpp
// compile with: /EHsc
#include <ios>
#include <iostream>
#include <wchar.h>
int main( )
{
using namespace std;
char *z = "Hello";
wchar_t y[2] = {0,0};
cout << z[0] << endl;
y[0] = wcout.widen( z[0] );
wcout << &y[0] << endl;
}
basic_ios::swap
Cambia los valores de este objeto basic_ios
por los de otro objeto basic_ios
. Sin embargo, no se intercambian los punteros a los búferes de flujo.
void swap(basic_ios&& right);
Parámetros
right
Objeto basic_ios
que se usa para intercambiar valores.
Comentarios
La función miembro protegida intercambia todos los valores almacenados en right
con *this
, excepto el stream buffer pointer
almacenado.
Consulte también
Seguridad para subprocesos en la biblioteca estándar de C++
Programación de iostream
Convenciones de iostreams