Classe ios_base
La classe descrive le funzioni di archiviazione e membro comuni ai flussi di input e output che non dipendono dai parametri del modello. Il modello basic_ios
di classe descrive cosa è comune e dipende dai parametri del modello.
Un oggetto della classe ios_base
archivia le informazioni di formattazione, costituite da:
Contrassegni di formato in un oggetto di tipo
fmtflags
.Maschera di eccezione in un oggetto di tipo
iostate
.Larghezza del campo in un oggetto di tipo
int
.Una precisione di visualizzazione in un oggetto di tipo
int
.Oggetto
locale
in un oggetto di tipolocale
.Due matrici estendibili, con elementi di tipo
long
evoid
puntatore.
Un oggetto della classe ios_base
archivia anche le informazioni sullo stato del flusso, in un oggetto di tipo iostate
e uno stack di callback.
Membri
Costruttori
Nome | Descrizione |
---|---|
ios_base |
Costruisce oggetti ios_base . |
Typedef
Nome | Descrizione |
---|---|
event_callback |
Descrive una funzione passata a register_call . |
fmtflags |
Costanti per specificare l'aspetto dell'output. |
iostate |
Definisce le costanti che descrivono lo stato di un flusso. |
openmode |
Descrive come interagire con un flusso. |
seekdir |
Specifica il punto iniziale per operazioni di offset. |
Enumerazioni
Nome | Descrizione |
---|---|
event |
Specifica i tipi di evento. |
Costanti
Nome | Descrizione |
---|---|
adjustfield |
Maschera di bit definita come internal right | left | . |
app |
Specifica la ricerca alla fine di un flusso prima di ogni inserimento. |
ate |
Specifica la ricerca alla fine di un flusso quando il relativo oggetto di controllo viene inizialmente creato. |
badbit |
Registra una perdita di integrità del buffer del flusso. |
basefield |
Maschera di bit definita come dec oct | hex | . |
beg |
Specifica la ricerca relativa all'inizio di una sequenza. |
binary |
Specifica che un file deve essere letto come flusso binario, anziché come flusso di testo. |
boolalpha |
Specifica l'inserimento o l'estrazione di oggetti di tipo bool come nomi (ad esempio true e false ), anziché come valori numerici. |
cur |
Specifica la ricerca relativa alla posizione corrente all'interno di una sequenza. |
dec |
Specifica l'inserimento o l'estrazione di valori interi in formato decimale. |
end |
Specifica la ricerca relativa alla fine di una sequenza. |
eofbit |
Registra la fine del file durante l'estrazione da un flusso. |
failbit |
Registra un errore per estrarre un campo valido da un flusso. |
fixed |
Specifica l'inserimento di valori a virgola mobile in formato a virgola fissa (senza il campo dell'esponente). |
floatfield |
Maschera di bit definita come fixed | scientific |
goodbit |
Tutti i bit dello stato vengono cancellati. |
hex |
Specifica l'inserimento o l'estrazione di valori interi in formato esadecimale. |
in |
Specifica l'estrazione da un flusso. |
internal |
Inserendo caratteri di riempimento in un punto interno a un campo numerico generato, riempie la larghezza di un campo. |
left |
Specifica la giustificazione a sinistra. |
oct |
Specifica l'inserimento o l'estrazione di valori interi in formato ottale. |
out |
Specifica l'inserimento in un flusso. |
right |
Specifica la giustificazione a destra. |
scientific |
Specifica l'inserimento di valori a virgola mobile in formato a virgola fissa (con un campo dell'esponente). |
showbase |
Specifica l'inserimento di un prefisso che consente di visualizzare la base di un campo Integer generato. |
showpoint |
Specifica l'inserimento non condizionale di un punto decimale in un campo a virgola mobile generato. |
showpos |
Specifica l'inserimento di un segno più in un campo numerico generato non negativo. |
skipws |
Specifica di ignorare lo spazio vuoto iniziale prima di determinate estrazioni. |
trunc |
Specifica l'eliminazione di contenuti di un file esistente quando viene creato l'oggetto di controllo. |
unitbuf |
Provoca lo scaricamento dell'output dopo ogni inserimento. |
uppercase |
Specifica l'inserimento di equivalenti in lettere maiuscole di lettere minuscole in determinati inserimenti. |
Funzioni
Nome | Descrizione |
---|---|
failure |
La classe membro funge da classe base per tutte le eccezioni generate dalla funzione membro cancellata nel modello basic_ios di classe . |
flags |
Imposta o restituisce le impostazioni dei flag correnti. |
getloc |
Restituisce l'oggetto archiviato locale . |
imbue |
Modifica le impostazioni locali. |
Init |
Crea gli oggetti standard iostream durante la costruzione. |
iword |
Assegna un valore da archiviare come un iword . |
precision |
Specifica il numero di cifre da visualizzare in un numero a virgola mobile. |
pword |
Assegna un valore da archiviare come un pword . |
register_callback |
Specifica una funzione di callback. |
setf |
Imposta i flag specificati. |
sync_with_stdio |
Assicura che iostream e le operazioni della libreria di runtime C vengano eseguite nell'ordine in cui vengono visualizzate nel codice sorgente. |
unsetf |
Provoca la disattivazione dei flag specificati. |
width |
Imposta la lunghezza del flusso di output. |
xalloc |
Specifica che una variabile deve far parte del flusso. |
Operatori
Nome | Descrizione |
---|---|
operator= |
L'operatore di assegnazione per gli oggetti ios_base . |
Requisiti
Intestazione: <ios>
Spazio dei nomi: std
event
Specifica i tipi di evento.
enum event {
erase_event,
imbue_event,
copyfmt_event};
Osservazioni:
Il tipo è un tipo enumerato che descrive un oggetto in grado di archiviare l'evento di callback utilizzato come argomento per una funzione registrata con register_callback
. I valori distinti degli eventi sono:
copyfmt_event
, per identificare un callback che si verifica vicino alla fine di una chiamata acopyfmt
, subito prima che venga copiata la maschera eccezione.erase_event
, per identificare un callback che si verifica all'inizio di una chiamata acopyfmt
o all'inizio di una chiamata al distruttore per*this
.imbue_event
, per identificare un callback che si verifica alla fine di una chiamata aimbue
, subito prima che la funzione restituisca .
Esempio
Per un esempio, vedere register_callback
.
event_callback
Descrive una funzione passata a register_call
.
typedef void (__cdecl *event_callback)(
event _E,
ios_base& _Base,
int _I);
Parametri
_E
Il event
.
_Base
Flusso in cui è stato chiamato l'evento.
_I
Numero definito dall'utente.
Osservazioni:
Il tipo descrive un puntatore a una funzione che può essere registrata con register_callback
. Questo tipo di funzione non deve generare un'eccezione.
Esempio
Vedere register_call
per un esempio che usa event_callback
.
failure
La classe failure
definisce la classe di base per tutti i tipi di oggetti generati come eccezioni dalle funzioni della libreria iostreams
per segnalare gli errori rilevati durante le operazioni del buffer del flusso.
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);
};
}
Osservazioni:
Il valore restituito da what()
è una copia di _Message
, possibilmente aumentato con un test basato su _Code
. Se _Code
non è specificato, il valore predefinito è make_error_code(io_errc::stream)
.
Esempio
// 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
Imposta o restituisce le impostazioni dei flag correnti.
fmtflags flags() const;
fmtflags flags(fmtflags fmtfl);
Parametri
fmtfl
Nuova impostazione fmtflags
.
Valore restituito
Impostazione fmtflags
precedente o corrente.
Osservazioni:
Vedere ios_base::fmtflags
per un elenco dei flag.
La prima funzione membro restituisce i flag di formato archiviati. La seconda funzione membro archivia fmtfl
nei flag di formato e restituisce il relativo valore archiviato precedente.
Esempio
// 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
Costanti per specificare l'aspetto dell'output.
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;
// ...
};
Osservazioni:
Supporta i manipolatori in ios
.
Il tipo è un tipo maschera di bit che descrive un oggetto in grado di archiviare flag di formato. I valori flag distinti (elementi) sono:
dec
, per inserire o estrarre i valori interi in formato decimale.hex
, per inserire o estrarre i valori interi in formato esadecimale.oct
, per inserire o estrarre i valori interi in formato ottale.showbase
, per inserire un prefisso che consente di visualizzare la base di un campo Integer generato.internal
, per riempire la larghezza del campo in base alle necessità inserendo caratteri di riempimento in un punto interno di un campo numerico generato. Per informazioni sull'impostazione della larghezza del campo, vederesetw
.left
, per riempire la larghezza del campo in base alle necessità inserendo caratteri di riempimento alla fine di un campo generato (giustificazione a sinistra).right
, per riempire la larghezza del campo in base alle necessità inserendo caratteri di riempimento all'inizio di un campo generato (giustificazione a destra).boolalpha
, per inserire o estrarre oggetti di tipobool
come nomi (ad esempiotrue
efalse
) anziché come valori numerici.fixed
, per inserire valori a virgola mobile in formato a virgola fissa (senza il campo dell'esponente).scientific
, per inserire valori a virgola mobile in formato scientifico (con un campo dell'esponente).showpoint
, per inserire in modo non condizionale un punto decimale in un campo a virgola mobile generato.showpos
, per inserire un segno più in un campo numerico generato non negativo.skipws
, per ignorare lo spazio vuoto iniziale prima di determinate estrazioni.unitbuf
, per scaricare l'output dopo ogni inserimento.uppercase
, per inserire gli equivalenti in lettere maiuscole di lettere minuscole in determinati inserimenti.
Inoltre, altri valori utili sono:
adjustfield
, una maschera di bit definita comeinternal
|left
|right
basefield
, definito comedec
|hex
|oct
floatfield
, definito comefixed
|scientific
Per esempi di funzioni che modificano questi flag di formato, vedere <iomanip>
.
getloc
Restituisce l'oggetto archiviato locale
.
locale getloc() const;
Valore restituito
Oggetto archiviato locale
.
Esempio
// ios_base_getlock.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
using namespace std;
cout << cout.getloc( ).name( ).c_str( ) << endl;
}
C
imbue
Modifica le impostazioni locali.
locale imbue(const locale& _Loc);
Parametri
_Loc
Nuove impostazioni locali.
Valore restituito
Impostazioni locali precedenti.
Osservazioni:
La funzione membro archivia _Loc
nell'oggetto locale
e quindi segnala l'evento di callback e imbue_event
. Restituisce il valore archiviato precedente.
Esempio
Vedere basic_ios::imbue
per un esempio.
Init
Crea gli oggetti standard iostream
durante la costruzione.
class Init { };
Osservazioni:
La classe nidificata descrive un oggetto la cui costruzione garantisce che gli oggetti standard iostream
vengano costruiti correttamente, anche prima dell'esecuzione di un costruttore per un oggetto statico arbitrario.
ios_base
Costruisce oggetti ios_base
.
ios_base();
Osservazioni:
Il costruttore (protetto) non esegue alcuna operazione. Una chiamata successiva a basic_ios::
init deve inizializzare l'oggetto prima che possa essere eliminato definitivamente. Pertanto, l'unico uso sicuro per la classe ios_base
è come classe base per il modello di basic_ios
classe .
iostate
Tipo di costanti che descrivono lo stato di un flusso.
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;
// ...
};
Osservazioni:
Il tipo è costituito da un tipo maschera di bit che descrive un oggetto in grado di archiviare informazioni sullo stato del flusso. I valori flag distinti (elementi) sono:
badbit
, per registrare una perdita di integrità del buffer del flusso.eofbit
, per registrare la fine del file durante l'estrazione da un flusso.failbit
, per registrare un errore per l'estrazione di un campo valido da un flusso.
Un valore utile è anche goodbit
, in cui non è impostato nessuno dei bit indicati in precedenza ( goodbit
è sempre zero).
iword
Assegna un valore da archiviare come un iword
.
long& iword(int idx);
Parametri
idx
Indice del valore da archiviare come iword
.
Osservazioni:
La funzione membro restituisce un riferimento all'idx dell'elemento della matrice estendibile con elementi di tipo long
. Tutti gli elementi sono effettivamente presenti e archiviano inizialmente il valore zero. Il riferimento restituito non è valido dopo la chiamata successiva a iword
per l'oggetto, dopo che l'oggetto viene modificato da una chiamata a basic_ios::
copyfmt
o dopo che l'oggetto viene eliminato definitivamente.
Se idx
è negativo o se l'archiviazione univoca non è disponibile per l'elemento, la funzione chiama setstate
(badbit)
e restituisce un riferimento che potrebbe non essere univoco.
Per ottenere un indice univoco, per l'uso in tutti gli oggetti di tipo ios_base
, chiamare xalloc
.
Esempio
Vedere xalloc
per un esempio di come usare iword
.
openmode
Descrive come interagire con un flusso.
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;
// ...
};
Osservazioni:
Modalità di apertura per diversi iostream
oggetti. I valori del flag sono:
Costante | Effetto |
---|---|
app |
Cercare la fine del flusso prima di ogni scrittura |
ate |
Cercare la fine del flusso immediatamente dopo l'apertura |
binary |
Apertura in modalità binaria. Per una descrizione della modalità binaria, vedere fopen . |
in |
Apri per la lettura |
out |
Apri per la scrittura |
trunc |
Eliminare il contenuto del file dopo l'apertura |
Esempio
// 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=
L'operatore di assegnazione per gli oggetti ios_base
.
ios_base& operator=(const ios_base& right);
Parametri
right
Oggetto di tipo ios_base
.
Valore restituito
Oggetto destinatario dell'assegnazione.
Osservazioni:
L'operatore copia le informazioni di formattazione archiviate e crea così una nuova copia delle matrici estendibili. Restituisce quindi *this
. Lo stack di callback non viene copiato.
Questo operatore viene usato solo dalle classi derivate da ios_base
.
precision
Specifica il numero di cifre da visualizzare in un numero a virgola mobile.
streamsize precision() const;
streamsize precision(streamsize _Prec);
Parametri
_Prec
Numero di cifre significative da visualizzare o numero di cifre dopo il separatore decimale nella notazione fissa.
Valore restituito
La prima funzione membro restituisce la precisione di visualizzazione archiviata. La seconda funzione membro archivia _Prec
nella precisione di visualizzazione e restituisce il relativo valore precedente archiviato.
Osservazioni:
I numeri a virgola mobile vengono visualizzati in notazione fissa con fixed
.
Esempio
// 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
Assegna un valore da archiviare come un pword
.
void *& pword(int index);
Parametri
index
Indice del valore da archiviare come pword
.
Osservazioni:
La funzione membro restituisce un riferimento all'indice di elemento della matrice estendibile con elementi di puntatore di tipovoid
. Tutti gli elementi sono effettivamente presenti e archiviano inizialmente il puntatore Null. Il riferimento restituito non è valido dopo la chiamata successiva a pword
per l'oggetto, dopo che l'oggetto viene modificato da una chiamata a basic_ios::
copyfmt
o dopo che l'oggetto viene eliminato definitivamente.
Se l'indice è negativo o se l'archiviazione univoca non è disponibile per l'elemento, la funzione chiama setstate
(badbit)
e restituisce un riferimento che potrebbe non essere univoco.
Per ottenere un indice univoco, per l'uso in tutti gli oggetti di tipo ios_base
, chiamare xalloc
.
Esempio
Vedere xalloc
per un esempio di uso pword
di .
register_callback
Specifica una funzione di callback.
void register_callback(
event_callback pfn, int idx);
Parametri
pfn
Puntatore alla funzione di callback.
idx
Numero definito dall'utente.
Osservazioni:
La funzione membro inserisce la coppia {pfn, idx}
nello stack di callback archiviato. Quando viene segnalato un evento di callback ev , le funzioni vengono chiamate, in ordine inverso del Registro di sistema, dall'espressione (*pfn)(ev, *this, idx)
.
Esempio
// 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
Specifica il punto iniziale per operazioni di offset.
namespace std {
class ios_base {
public:
typedef implementation-defined-enumerated-type seekdir;
static const seekdir beg;
static const seekdir cur;
static const seekdir end;
// ...
};
}
Osservazioni:
Il tipo è un tipo enumerato che descrive un oggetto in grado di archiviare la modalità di ricerca utilizzata come argomento per le funzioni membro di diverse iostream
classi. I valori flag distinti sono:
beg
, per cercare (modificare la posizione di lettura o scrittura corrente) rispetto all'inizio di una sequenza (matrice, flusso o file).cur
, per cercare la posizione relativa alla posizione corrente all'interno di una sequenza.end
, per cercare in relazione alla fine di una sequenza.
Esempio
// 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
Imposta i flag specificati.
fmtflags setf(
fmtflags _Mask
);
fmtflags setf(
fmtflags _Mask,
fmtflags _Unset
);
Parametri
_Mask
Flag da attivare.
_Unset
Flag da disattivare.
Valore restituito
Flag di formato precedenti
Osservazioni:
La prima funzione membro chiama flags(_Mask | _Flags)
efficacemente (imposta i bit selezionati) e quindi restituisce i flag di formato precedenti. La seconda funzione membro chiama flags(_Mask & fmtfl, flags & ~_Mask)
efficacemente (sostituire i bit selezionati sotto una maschera) e quindi restituisce i flag di formato precedenti.
Esempio
// 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
Assicura che iostream
e le operazioni della libreria di runtime C vengano eseguite nell'ordine in cui vengono visualizzate nel codice sorgente.
static bool sync_with_stdio(
bool _Sync = true
);
Parametri
_Sync
Indica se tutti i flussi sono sincronizzati con stdio
.
Valore restituito
Impostazione precedente per questa funzione.
Osservazioni:
La funzione membro statica archivia un stdio
flag di sincronizzazione, che inizialmente è true
. Quando true
, questo flag garantisce che le operazioni sullo stesso file vengano sincronizzate correttamente tra le funzioni e le iostreams
funzioni definite nella libreria standard C++. In caso contrario, la sincronizzazione può essere garantita o meno, ma le prestazioni potrebbero essere migliorate. La funzione archivia _Sync
nel stdio
flag di sincronizzazione e restituisce il valore archiviato precedente. È possibile chiamarla in modo affidabile solo prima di eseguire qualsiasi operazione sui flussi standard.
unsetf
Disattiva i flag specificati.
void unsetf(
fmtflags _Mask
);
Parametri
_Mask
Flag da disattivare.
Osservazioni:
La funzione membro chiama flags(~_Mask & flags)
efficacemente (cancella i bit selezionati).
Esempio
Vedere ios_base::setf
per un esempio di uso unsetf
di .
width
Imposta la lunghezza del flusso di output.
streamsize width( ) const;
streamsize width(
streamsize _Wide
);
Parametri
_Wide
Dimensione desiderata del flusso di output.
Valore restituito
Impostazione della larghezza corrente.
Osservazioni:
La prima funzione membro restituisce la larghezza del campo archiviato. La seconda funzione membro archivia _Wide
la larghezza del campo e restituisce il valore archiviato precedente.
Esempio
// 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
Specifica che una variabile fa parte del flusso.
static int xalloc( );
Valore restituito
La funzione membro statica restituisce un valore statico archiviato, che incrementa in ogni chiamata.
Osservazioni:
È possibile usare il valore restituito come argomento di indice univoco quando si chiamano le funzioni iword
membro o pword
.
Esempio
// 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
Vedi anche
Thread Safety in the C++ Standard Library (Sicurezza dei thread nella libreria standard C++)
Programmazione iostream
iostreams Conventions (Convenzioni di iostream)