Clase ios_base

La clase describe las funciones de almacenamiento y miembro comunes al flujo de entrada y al de salida que no dependen de los parámetros de plantilla. (La plantilla de clase basic_ios describe lo que es común y depende de los parámetros de plantilla).

Un objeto de clase ios_base almacena la información de formato, que consta de:

  • Marcas de formato en un objeto de tipo fmtflags.

  • Una máscara de excepción en un objeto de tipo iostate.

  • Ancho de campo en un objeto de tipo int.

  • Una precisión de visualización en un objeto de tipo int.

  • Objeto locale de un objeto de tipo locale.

  • Dos matrices extensibles, con elementos de punteros de tipo long y void.

Un objeto de clase ios_base también almacena información de estado de flujo en un objeto de tipo iostate y una pila de devolución de llamada.

Miembros

Constructores

Nombre Descripción
ios_base Construye objetos ios_base.

Typedefs

Nombre Descripción
event_callback Describe una función que se pasa a register_call.
fmtflags Constantes para especificar la apariencia de la salida.
iostate Define constantes que describen el estado de una secuencia.
openmode Describe cómo interactuar con una secuencia.
seekdir Especifica el punto de partida para las operaciones de desplazamiento.

Enumeraciones

Nombre Descripción
event Especifica tipos de eventos.

Constantes

Nombre Descripción
adjustfield Máscara de bits definida como internal | left | right.
app Especifica la búsqueda al final de una secuencia antes de cada inserción.
ate Especifica la búsqueda al final de una secuencia cuando se crea por primera vez su objeto de control.
badbit Registra una pérdida de integridad del búfer de secuencia.
basefield Máscara de bits definida como dec | hex | oct.
beg Especifica la búsqueda en relación con el principio de una secuencia.
binary Especifica que se debe leer un archivo como una secuencia binaria, en lugar de como una secuencia de texto.
boolalpha Especifica la inserción o extracción de objetos de tipo bool como nombres (como true y false), en lugar de como valores numéricos.
cur Especifica la búsqueda en relación con la posición actual dentro de una secuencia.
dec Especifica la inserción o extracción de valores enteros en formato decimal.
end Especifica la búsqueda en relación con el final de una secuencia.
eofbit Registra el final de archivo al extraer de una secuencia.
failbit Registra un error al extraer un campo válido de una secuencia.
fixed Especifica la inserción de valores de punto flotante en formato de punto fijo (sin campo de exponente).
floatfield Máscara de bits que se define como fixed | scientific
goodbit Se borran todos los bits de estado.
hex Especifica la inserción o extracción de valores enteros en formato hexadecimal.
in Especifica la extracción de una secuencia.
internal Rellena un ancho de campo insertando caracteres de relleno en un punto interno a un campo numérico generado.
left Especifica la justificación a la izquierda.
oct Especifica la inserción o extracción de valores enteros en formato octal.
out Especifica la inserción en una secuencia.
right Especifica la justificación a la derecha.
scientific Especifica la inserción de valores de punto flotante en formato científico (con un campo de exponente).
showbase Especifica la inserción de un prefijo que revela la base de un campo entero generado.
showpoint Especifica la inserción incondicional de un separador decimal en un campo de punto flotante generado.
showpos Especifica la inserción de un signo más en un campo numérico generado no negativo.
skipws Especifica la omisión del espacio en blanco inicial antes de ciertas extracciones.
trunc Especifica la eliminación de contenido de un archivo existente cuando se crea su objeto de control.
unitbuf Hace que la salida se vacíe después de cada inserción.
uppercase Especifica la inserción de los equivalentes en mayúsculas de letras en minúsculas en ciertas inserciones.

Functions

Nombre Descripción
failure Clase miembro que actúa como la clase base para todas las excepciones producidas por la función miembro clear en la plantilla de clase basic_ios.
flags Establece o devuelve la configuración actual de la marca.
getloc Devuelve el objeto almacenado locale.
imbue Cambia la configuración regional.
Init Crea los objetos iostream estándar durante la construcción.
iword Asigna un valor que se va a almacenar como iword.
precision Especifica el número de dígitos que se debe mostrar en un número de punto flotante.
pword Asigna un valor que se va a almacenar como pword.
register_callback Especifica una función de devolución de llamada.
setf Establece las marcas especificadas.
sync_with_stdio Se asegura de que las operaciones de la biblioteca en tiempo de ejecución de C y iostream se produzcan en el orden en que aparecen en el código fuente.
unsetf Hace que las marcas especificadas se desactiven.
width Establece la longitud del flujo de salida.
xalloc Especifica que una variable formará parte de la secuencia.

Operadores

Nombre Descripción
operator= Operador de asignación de objetos ios_base.

Requisitos

Encabezado<ios>:

Espacio de nombres:std

event

Especifica tipos de eventos.

enum event {
    erase_event,
    imbue_event,
    copyfmt_event};

Comentarios

El tipo es un tipo enumerado que describe un objeto que puede almacenar el evento de devolución de llamada usado como argumento para una función registrada con register_callback. Los diferentes valores de evento son:

  • copyfmt_event, para identificar una devolución de llamada que se produce casi al final de una llamada a copyfmt, justo antes de que se copie la máscara de excepción.

  • erase_event, para identificar una devolución de llamada que se produce al principio de una llamada a copyfmt o al principio de una llamada al destructor para *this.

  • imbue_event, para identificar una devolución de llamada que se produce casi al final de una llamada a imbue, justo antes de que se devuelva la función.

Ejemplo

Vea register_callback para obtener un ejemplo.

event_callback

Describe una función que se pasa a register_call.

typedef void (__cdecl *event_callback)(
    event _E,
    ios_base& _Base,
    int _I);

Parámetros

_E
El event.

_Base
Flujo en el que se ha llamado al evento.

_I
Número definido por el usuario.

Comentarios

El tipo describe un puntero a una función que se puede registrar con register_callback. Este tipo de función no debe producir una excepción.

Ejemplo

Consulte register_call para ver un ejemplo en el que se usa event_callback.

failure

La clase failure define la clase base para los tipos de todos los objetos que las funciones de la biblioteca iostreams producen como excepciones para notificar los errores detectados durante las operaciones del búfer de flujo.

namespace std {
    class failure : public system_error {
    public:
        explicit failure(
            const string& _Message,
            const error_code& _Code = io_errc::stream);

        explicit failure(
            const char* str,
            const error_code& _Code = io_errc::stream);
    };
}

Comentarios

El valor devuelto por what() es una copia de _Message, posiblemente aumentada con una prueba basada en _Code. Si no se especifica _Code, el valor predeterminado es make_error_code(io_errc::stream).

Ejemplo

// ios_base_failure.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main ( )
{
    using namespace std;
    fstream file;
    file.exceptions(ios::failbit);
    try
    {
        file.open( "rm.txt", ios_base::in );
        // Opens nonexistent file for reading
    }
    catch( ios_base::failure f )
    {
        cout << "Caught an exception: " << f.what() << endl;
    }
}
Caught an exception: ios_base::failbit set

flags

Establece o devuelve la configuración actual de la marca.

fmtflags flags() const;
fmtflags flags(fmtflags fmtfl);

Parámetros

fmtfl
Nueva configuración de fmtflags.

Valor devuelto

Configuración anterior o actual de fmtflags.

Comentarios

Consulte ios_base::fmtflags para ver una lista de las marcas.

La primera función miembro devuelve las marcas de formato almacenadas. La segunda función miembro almacena fmtfl en las marcas de formato y devuelve su anterior valor almacenado.

Ejemplo

// ios_base_flags.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main ( )
{
    using namespace std;
    cout << cout.flags( ) << endl;
    cout.flags( ios::dec | ios::boolalpha );
    cout << cout.flags( );
}
513
16896

fmtflags

Constantes para especificar la apariencia de la salida.

class ios_base {
public:
   typedef implementation-defined-bitmask-type fmtflags;
   static const fmtflags boolalpha;
   static const fmtflags dec;
   static const fmtflags fixed;
   static const fmtflags hex;
   static const fmtflags internal;
   static const fmtflags left;
   static const fmtflags oct;
   static const fmtflags right;
   static const fmtflags scientific;
   static const fmtflags showbase;
   static const fmtflags showpoint;
   static const fmtflags showpos;
   static const fmtflags skipws;
   static const fmtflags unitbuf;
   static const fmtflags uppercase;
   static const fmtflags adjustfield;
   static const fmtflags basefield;
   static const fmtflags floatfield;
   // ...
};

Comentarios

Es compatible con los manipuladores de ios.

El tipo es un tipo de máscara de bits que describe un objeto que puede almacenar marcas de formato. Los distintos valores de marca (elementos) son:

  • dec, para insertar o extraer valores enteros en formato decimal.

  • hex, para insertar o extraer valores enteros en formato hexadecimal.

  • oct, para insertar o extraer valores enteros en formato octal.

  • showbase, para insertar un prefijo que revela la base de un campo numérico entero generado.

  • internal, para rellenar un ancho de campo tanto como sea necesario mediante la inserción de caracteres de relleno en un punto interno a un campo numérico generado. (Para obtener información sobre cómo establecer el ancho de campo, vea setw).

  • left, para rellenar un ancho de campo tanto como sea necesario mediante la inserción de caracteres de relleno al final de un campo generado (justificación a la izquierda).

  • right, para rellenar un ancho de campo tanto como sea necesario mediante la inserción de caracteres de relleno al principio de un campo generado (justificación a la derecha).

  • boolalpha, para insertar o extraer objetos de tipo bool, como nombres (como true y false), en lugar de como valores numéricos.

  • fixed, para insertar valores de punto flotante en formato de punto fijo (sin campo de exponente).

  • scientific, para insertar valores de punto flotante en formato científico (con un campo de exponente).

  • showpoint, para insertar un separador decimal de manera incondicional en un campo de punto flotante generado.

  • showpos, para insertar un signo más en un campo numérico generado no negativo.

  • skipws, para omitir el espacio en blanco inicial antes de ciertas extracciones.

  • unitbuf, para vaciar los resultados después de cada inserción.

  • uppercase, para insertar los equivalentes en mayúsculas de letras en minúsculas en ciertas inserciones.

Además, varios valores útiles son:

  • adjustfield, una máscara de bits definida como internal | left | right

  • basefield, definida como dec | hex | oct

  • floatfield, definida como fixed | scientific

Para ver ejemplos de funciones que modifican estas marcas de formato, vea <iomanip>.

getloc

Devuelve el objeto almacenado locale.

locale getloc() const;

Valor devuelto

Objeto almacenado locale.

Ejemplo

// ios_base_getlock.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
    using namespace std;
    cout << cout.getloc( ).name( ).c_str( ) << endl;
}
C

imbue

Cambia la configuración regional.

locale imbue(const locale& _Loc);

Parámetros

_Loc
Nueva configuración regional.

Valor devuelto

Configuración regional anterior.

Comentarios

La función miembro almacena _Loc en el objeto locale y, después, notifica el evento de devolución de llamada y imbue_event. Devuelve el valor almacenado anterior.

Ejemplo

Para ver un ejemplo, consulte basic_ios::imbue.

Init

Crea los objetos iostream estándar durante la construcción.

class Init { };

Comentarios

La clase anidada describe un objeto cuya construcción garantiza que los objetos de iostream estándar se construyen correctamente, incluso antes de la ejecución de un constructor para un objeto estático arbitrario.

ios_base

Construye objetos ios_base.

ios_base();

Comentarios

El constructor (protegido) no hace nada. Una llamada posterior a basic_ios::init debe inicializar el objeto para que se pueda destruir con seguridad. Por lo tanto, el único uso seguro de la clase ios_base es como clase base para la clase de plantilla basic_ios.

iostate

Tipo de constantes que describen el estado de un flujo.

class ios_base {
public:
   typedef implementation-defined-bitmask-type iostate;
   static const iostate badbit;
   static const iostate eofbit;
   static const iostate failbit;
   static const iostate goodbit;
   // ...
};

Comentarios

El tipo es un tipo de máscara de bits que describe un objeto que puede almacenar información sobre el estado del flujo. Los distintos valores de marca (elementos) son:

  • badbit, para registrar una pérdida de integridad del búfer de flujo.
  • eofbit, para registrar el final de archivo al extraer de un flujo.
  • failbit, para registrar un error al extraer un campo válido de un flujo.

Además, un valor útil es goodbit, en el que no se establece ninguno de los bits mencionados anteriormente (está garantizado que goodbit es cero).

iword

Asigna un valor que se va a almacenar como iword.

long& iword(int idx);

Parámetros

idx
Índice del valor que se va a almacenar como iword.

Comentarios

La función miembro devuelve una referencia al elemento idx de la matriz extensible con elementos de tipo long. Todos los elementos están presentes de forma eficaz y almacenan inicialmente el valor cero. La referencia devuelta no es válida después de la siguiente llamada a iword para el objeto, después de que el objeto se haya modificado mediante una llamada a basic_ios::copyfmt, o después de que el objeto se haya destruido.

Si idx es negativo o si el almacenamiento único no está disponible para el elemento, la función llama a setstate(badbit) y devuelve una referencia que podría no ser única.

Para obtener un índice único para su uso en todos los objetos de tipo ios_base, llame a xalloc.

Ejemplo

Vea xalloc para obtener un ejemplo de cómo usar iword.

openmode

Describe cómo interactuar con una secuencia.

class ios_base {
public:
   typedef implementation-defined-bitmask-type openmode;
   static const openmode  in;
   static const openmode  out;
   static const openmode  ate;
   static const openmode  app;
   static const openmode  trunc;
   static const openmode  binary;
   // ...
};

Comentarios

Modo de apertura para varios objetos iostream. Los valores de marca son:

Constante Efecto
app Busca el final de la secuencia antes de cada escritura.
ate Busca el final de la secuencia inmediatamente después de abrirla.
binary Abrir en modo binario. Consulte fopen para ver una descripción del modo binario.
in Abrir para lectura
out Abrir para escritura
trunc Eliminar el contenido del archivo después de abrirlo.

Ejemplo

// ios_base_openmode.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main ( )
{
    using namespace std;
    fstream file;
    file.open( "rm.txt", ios_base::out | ios_base::trunc );

    file << "testing";
}

operator=

Operador de asignación de objetos ios_base.

ios_base& operator=(const ios_base& right);

Parámetros

right
Objeto de tipo ios_base.

Valor devuelto

Objeto al que se va a asignar.

Comentarios

El operador copia la información de formato almacenada y crea una nueva copia de las matrices extensibles. Después, devuelve *this. La pila de devolución de llamada no se copia.

Este operador solo lo usan las clases derivadas de ios_base.

precision

Especifica el número de dígitos que se debe mostrar en un número de punto flotante.

streamsize precision() const;
streamsize precision(streamsize _Prec);

Parámetros

_Prec
Número de dígitos significativos que se van a mostrar, o número de dígitos después del separador decimal en notación fija.

Valor devuelto

La primera función miembro devuelve la precisión de visualización almacenada. La segunda función miembro almacena _Prec en la precisión de visualización y devuelve su anterior valor almacenado.

Comentarios

Los números de punto flotante se muestran en notación fija con fixed.

Ejemplo

// ios_base_precision.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
    using namespace std;
    float i = 31.31234F;

    cout.precision( 3 );
    cout << i << endl;          // display three significant digits
    cout << fixed << i << endl; // display three digits after decimal
                                // point
}
31.3
31.312

pword

Asigna un valor que se va a almacenar como pword.

void *& pword(int index);

Parámetros

index
Índice del valor que se va a almacenar como pword.

Comentarios

La función miembro devuelve una referencia al elemento index de la matriz extensible con elementos de puntero de tipo void. Todos los elementos están presentes de forma eficaz y almacenan inicialmente el puntero null. La referencia devuelta no es válida después de la siguiente llamada a pword para el objeto, después de que el objeto se haya modificado mediante una llamada a basic_ios::copyfmt, o después de que el objeto se haya destruido.

Si index es negativo o si el almacenamiento único no está disponible para el elemento, la función llama a setstate(badbit) y devuelve una referencia que podría no ser única.

Para obtener un índice único para su uso en todos los objetos de tipo ios_base, llame a xalloc.

Ejemplo

Vea xalloc para obtener un ejemplo en el que se usa pword.

register_callback

Especifica una función de devolución de llamada.

void register_callback(
    event_callback pfn, int idx);

Parámetros

pfn
Puntero a la función de devolución de llamada.

idx
Número definido por el usuario.

Comentarios

La función miembro inserta el par {pfn, idx}, en la pila de devolución de llamada almacenada. Cuando se notifica un evento de devolución de llamada ev, se llama a las funciones en orden inverso de registro mediante la expresión (*pfn)(ev, *this, idx).

Ejemplo

// ios_base_register_callback.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

using namespace std;

void callback1( ios_base::event e, ios_base& stream, int arg )
{
    cout << "in callback1" << endl;
    switch ( e )
    {
    case ios_base::erase_event:
        cout << "an erase event" << endl;
        break;
    case ios_base::imbue_event:
        cout << "an imbue event" << endl;
        break;
    case ios_base::copyfmt_event:
        cout << "an copyfmt event" << endl;
        break;
    };
}

void callback2( ios_base::event e, ios_base& stream, int arg )
{
    cout << "in callback2" << endl;
    switch ( e )
    {
    case ios_base::erase_event:
        cout << "an erase event" << endl;
        break;
    case ios_base::imbue_event:
        cout << "an imbue event" << endl;
        break;
    case ios_base::copyfmt_event:
        cout << "an copyfmt event" << endl;
        break;
    };
}

int main( )
{
    // Make sure the imbue will not throw an exception
    // assert( setlocale( LC_ALL, "german" )!=NULL );

    cout.register_callback( callback1, 0 );
    cin.register_callback( callback2, 0 );

    try
    {
        // If no exception because the locale's not found,
        // generate an imbue_event on callback1
        cout.imbue(locale("german"));
    }
    catch(...)
    {
        cout << "exception" << endl;
    }

    // This will
    // (1) erase_event on callback1
    // (2) copyfmt_event on callback2
    cout.copyfmt(cin);

    // We get two erase events from callback2 at the end because
    // both cin and cout have callback2 registered when cin and cout
    // are destroyed at the end of program.
}
in callback1
an imbue event
in callback1
an erase event
in callback2
an copyfmt event
in callback2
an erase event
in callback2
an erase event

seekdir

Especifica el punto de partida para las operaciones de desplazamiento.

namespace std {
    class ios_base {
    public:
        typedef implementation-defined-enumerated-type seekdir;
        static const seekdir beg;
        static const seekdir cur;
        static const seekdir end;
        // ...
    };
}

Comentarios

El tipo es un tipo de enumeración que describe un objeto que puede almacenar el modo de búsqueda utilizado como argumento para las funciones miembro de varias clases iostream. Los diferentes valores de marca son:

  • beg, para buscar (modificar la posición actual de lectura o escritura) en relación con el principio de una secuencia (matriz, secuencia o archivo).

  • cur, para buscar en relación con la posición actual dentro de una secuencia.

  • end, para buscar en relación con el final de una secuencia.

Ejemplo

// ios_base_seekdir.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main ( )
{
    using namespace std;
    fstream file;
    file.open( "rm.txt", ios_base::out | ios_base::trunc );

    file << "testing";
    file.seekp( 0, ios_base::beg );
    file << "a";
    file.seekp( 0, ios_base::end );
    file << "a";
}

setf

Establece las marcas especificadas.

fmtflags setf(
    fmtflags _Mask
);
fmtflags setf(
    fmtflags _Mask,
    fmtflags _Unset
);

Parámetros

_Mask
Marcas que se van a activar.

_Unset
Marcas que se van a desactivar.

Valor devuelto

Marcas de formato anteriores.

Comentarios

La primera función miembro llama eficazmente a flags(_Mask | _Flags) (establece bits seleccionados) y, a continuación, devuelve las marcas de formato anteriores. La segunda función miembro llama eficazmente a flags(_Mask & fmtfl, flags & ~_Mask) (sustituye bits seleccionados bajo una máscara) y, a continuación, devuelve las marcas de formato anteriores.

Ejemplo

// ios_base_setf.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
    using namespace std;
    int i = 10;
    cout << i << endl;

    cout.unsetf( ios_base::dec );
    cout.setf( ios_base::hex );
    cout << i << endl;

    cout.setf( ios_base::dec );
    cout << i << endl;
    cout.setf( ios_base::hex, ios_base::dec );
    cout << i << endl;
}

sync_with_stdio

Se asegura de que las operaciones de la biblioteca en tiempo de ejecución de C y iostream se produzcan en el orden en que aparecen en el código fuente.

static bool sync_with_stdio(
   bool _Sync = true
);

Parámetros

_Sync
Indica si todos los flujos están sincronizados con stdio.

Valor devuelto

Configuración anterior para esta función.

Comentarios

La función miembro estática almacena una marca de sincronización stdio, que inicialmente es true. Cuando es true, esta marca garantiza que las operaciones del mismo archivo se sincronicen correctamente entre las funciones iostreams y las funciones definidas en la biblioteca estándar de C++. De lo contrario, es posible que se garantice o no la sincronización, pero se puede mejorar el rendimiento. La función almacena _Sync en la marca de sincronización stdio y devuelve el valor anterior almacenado. Solo puede llamarlo de forma confiable antes de realizar cualquier operación en los flujos estándar.

unsetf

Desactiva las marcas especificadas.

void unsetf(
   fmtflags _Mask
);

Parámetros

_Mask
Marcas que quiere desactivar.

Comentarios

La función miembro llama realmente a flags(~_Mask & flags) (bits seleccionados claramente).

Ejemplo

Vea ios_base::setf para obtener un ejemplo del uso de unsetf.

width

Establece la longitud del flujo de salida.

streamsize width( ) const;
streamsize width(
   streamsize _Wide
);

Parámetros

_Wide
Tamaño deseado del flujo de salida.

Valor devuelto

Configuración de ancho actual.

Comentarios

La primera función miembro devuelve el ancho de campo almacenado. La segunda función miembro almacena _Wide en el ancho de campo y devuelve su anterior valor almacenado.

Ejemplo

// ios_base_width.cpp
// compile with: /EHsc
#include <iostream>

int main( ) {
    using namespace std;

    cout.width( 20 );
    cout << cout.width( ) << endl;
    cout << cout.width( ) << endl;
}
20
0

xalloc

Especifica que una variable formará parte de la secuencia.

static int xalloc( );

Valor devuelto

La función miembro estática devuelve un valor estático almacenado, que se incrementa en cada llamada.

Comentarios

Puede usar el valor devuelto como argumento de índice único al llamar a las funciones miembro iword o pword.

Ejemplo

// ios_base_xalloc.cpp
// compile with: /EHsc
// Lets you store user-defined information.
// iword, jword, xalloc
#include <iostream>

int main( )
{
    using namespace std;

    static const int i = ios_base::xalloc();
    static const int j = ios_base::xalloc();
    cout.iword( i ) = 11;
    cin.iword( i ) = 13;
    cin.pword( j ) = "testing";
    cout << cout.iword( i ) << endl;
    cout << cin.iword( i ) << endl;
    cout << ( char * )cin.pword( j ) << endl;
}
11
13
testing

Consulte también

Seguridad para subprocesos en la biblioteca estándar de C++
Programación con iostream
Convenciones de iostreams