Share via


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:

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. Su valor predeterminado es 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 es distinto de 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 puntero NULL.

  • rdstate devuelve goodbit si _Sb es distinto de cero; de lo contrario, devuelve badbit.

  • exceptions devuelve goodbit.

  • flags devuelve skipws | dec. Para obtener más información, vea skipws y dec.

  • width devuelve 0.

  • precision devuelve 6.

  • fill devuelve el carácter de espacio.

  • getloc devuelve locale::classic.

  • iword devuelve cero, y pword devuelve un puntero NULL 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