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 tipo locale.

  • Due matrici estendibili, con elementi di tipo long e void puntatore.

Un oggetto della classe ios_base archivia anche le informazioni sullo stato del flusso, in un oggetto di tipo iostatee 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 internalright | 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 decoct | 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_iosdi 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 a copyfmt, subito prima che venga copiata la maschera eccezione.

  • erase_event, per identificare un callback che si verifica all'inizio di una chiamata a copyfmto all'inizio di una chiamata al distruttore per *this.

  • imbue_event, per identificare un callback che si verifica alla fine di una chiamata a imbue, 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, vedere setw.

  • 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 tipo bool come nomi (ad esempio true e false) 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 come internal | left | right

  • basefield, definito come dec | hex | oct

  • floatfield, definito come fixed | 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_iosclasse .

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::copyfmto 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::copyfmto 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 pworddi .

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 unsetfdi .

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)