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 tipolocale
.Dos matrices extensibles, con elementos de punteros de tipo
long
yvoid
.
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. |
Funciones
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 acopyfmt
, 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 acopyfmt
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 aimbue
, 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, veasetw
).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 tipobool
, como nombres (comotrue
yfalse
), 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 comointernal
|left
|right
basefield
, definida comodec
|hex
|oct
floatfield
, definida comofixed
|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
Vea también
Seguridad para subprocesos en la biblioteca estándar de C++
Programación con iostream
Convenciones de iostreams