Sdílet prostřednictvím


ios_base Třída

Třída popisuje funkce úložiště a členů společné pro vstupní i výstupní datové proudy, které nezávisí na parametrech šablony. (Šablona basic_ios třídy popisuje, co je běžné a závisí na parametrech šablony.)

Objekt třídy ios_base ukládá informace o formátování, které se skládá z:

  • Formátovat příznaky v objektu typu fmtflags.

  • Maska výjimky v objektu typu iostate.

  • Šířka pole v objektu typu int.

  • Přesnost zobrazení v objektu typu int.

  • Objekt locale v objektu typu locale.

  • Dvě rozšiřitelná pole s prvky typu long a void ukazatele.

Objekt třídy ios_base také ukládá informace o stavu datového proudu, v objektu typu iostatea zásobník zpětného volání.

Členové

Konstruktory

Název Popis
ios_base Vytváří objekty ios_base .

Typedefs

Název Popis
event_callback Popisuje funkci předanou funkci register_call.
fmtflags Konstanty, které určují vzhled výstupu.
iostate Definuje konstanty popisující stav datového proudu.
openmode Popisuje, jak pracovat s datovým proudem.
seekdir Určuje výchozí bod pro operace posunu.

Výčty

Název Popis
event Určuje typy událostí.

Konstanty

Název Popis
adjustfield Bitová maska definovaná jako internalright | left | .
app Určuje hledání na konec datového proudu před každým vložením.
ate Určuje hledání na konec datového proudu při prvním vytvoření jeho řídicího objektu.
badbit Zaznamenává ztrátu integrity vyrovnávací paměti datového proudu.
basefield Bitová maska definovaná jako decoct | hex | .
beg Určuje hledání vzhledem k začátku sekvence.
binary Určuje, že soubor by se měl číst jako binární datový proud, a ne jako textový datový proud.
boolalpha Určuje vložení nebo extrakci objektů typu bool jako názvů (například true a false) místo číselných hodnot.
cur Určuje hledání vzhledem k aktuální pozici v posloupnosti.
dec Určuje vložení nebo extrakci celočíselné hodnoty v desítkovém formátu.
end Určuje hledání vzhledem ke konci sekvence.
eofbit Zaznamenává konec souboru při extrahování ze streamu.
failbit Zaznamenává selhání extrakce platného pole z datového proudu.
fixed Určuje vložení hodnot s plovoucí desetinnou čárkou ve formátu s pevnou čárkou (bez exponentního pole).
floatfield Bitová maska definovaná jako fixed | scientific
goodbit Všechny bity stavu jsou jasné.
hex Určuje vložení nebo extrakci celočíselné hodnoty v šestnáctkovém formátu.
in Určuje extrakci z datového proudu.
internal Vloží znaky výplně do šířky pole tak, že do vygenerovaného číselného pole vloží vnitřní znaky.
left Určuje levé odůvodnění.
oct Určuje vložení nebo extrakci celočíselné hodnoty v osmičkovém formátu.
out Určuje vložení do datového proudu.
right Určuje správné odůvodnění.
scientific Určuje vložení hodnot s plovoucí desetinnou čárkou ve vědeckém formátu (s exponentovým polem).
showbase Určuje vložení předpony, která odhalí základ vygenerovaného celočíselného pole.
showpoint Určuje bezpodmínečné vložení desetinné čárky do vygenerovaného pole s plovoucí desetinnou čárkou.
showpos Určuje vložení znaménka plus do nenegativního číselného pole.
skipws Určuje přeskočení úvodního prázdného místa před určitými extrahováními.
trunc Určuje odstranění obsahu existujícího souboru při vytvoření jeho řídicího objektu.
unitbuf Způsobí vyprázdnění výstupu po každém vložení.
uppercase Určuje vložení velkých písmen odpovídajících malým písmenům v určitých vloženích.

Funkce

Název Popis
failure Členská třída slouží jako základní třída pro všechny výjimky vyvolané členské funkce vymazat v šabloně basic_iostřídy .
flags Nastaví nebo vrátí aktuální nastavení příznaku.
getloc Vrátí uložený locale objekt.
imbue Změní národní prostředí.
Init Vytvoří standardní iostream objekty při vytváření.
iword Přiřadí hodnotu, která má být uložena iwordjako .
precision Určuje počet číslic, které se mají zobrazit v čísle s plovoucí desetinou čárkou.
pword Přiřadí hodnotu, která má být uložena pwordjako .
register_callback Určuje funkci zpětného volání.
setf Nastaví zadané příznaky.
sync_with_stdio Zajišťuje, aby iostream operace knihovny runtime jazyka C probíhaly v pořadí, v jakém se zobrazují ve zdrojovém kódu.
unsetf Způsobí vypnutí zadaných příznaků.
width Nastaví délku výstupního datového proudu.
xalloc Určuje, že proměnná musí být součástí datového proudu.

Operátory

Název Popis
operator= Operátor přiřazení pro ios_base objekty.

Požadavky

Záhlaví: <ios>

Obor názvů: std

event

Určuje typy událostí.

enum event {
    erase_event,
    imbue_event,
    copyfmt_event};

Poznámky

Typ je výčtový typ, který popisuje objekt, který může uložit událost zpětného volání použitou jako argument pro funkci zaregistrovanou v register_callback. Jedinečné hodnoty událostí jsou:

  • copyfmt_event– k identifikaci zpětného volání, ke kterému dojde blízko konce volání copyfmt, těsně před zkopírování masky výjimky.

  • erase_event, identifikovat zpětné volání, ke kterému dochází na začátku volání copyfmt, nebo na začátku volání destruktoru pro *this.

  • imbue_event– k identifikaci zpětného volání, ke kterému dochází na konci volání imbue, těsně před vrácením funkce.

Příklad

Podívejte se register_callback na příklad.

event_callback

Popisuje funkci předanou funkci register_call.

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

Parametry

_E
event.

_Base
Datový proud, ve kterém byla událost volána.

_I
Uživatelem definované číslo.

Poznámky

Typ popisuje ukazatel na funkci, kterou lze zaregistrovat pomocí register_callback. Tento typ funkce nesmí vyvolat výjimku.

Příklad

Podívejte register_call se na příklad, který používá event_callback.

failure

Třída failure definuje základní třídu pro typy všech objektů vyvolaných jako výjimky funkcemi v iostreams knihovně za účelem hlášení chyb zjištěných během operací vyrovnávací paměti datového proudu.

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);
    };
}

Poznámky

Hodnota vrácená what() hodnotou je kopie _Message, pravděpodobně rozšířena o test na _Codezákladě . Pokud _Code není zadána, výchozí hodnota je make_error_code(io_errc::stream).

Příklad

// 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

Nastaví nebo vrátí aktuální nastavení příznaku.

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

Parametry

fmtfl
Nové fmtflags nastavení.

Návratová hodnota

Předchozí nebo aktuální fmtflags nastavení.

Poznámky

Podívejte ios_base::fmtflags se na seznam příznaků.

První členová funkce vrátí příznaky uloženého formátu. Druhá členová funkce se uloží fmtfl do příznaků formátu a vrátí předchozí uloženou hodnotu.

Příklad

// 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

Konstanty, které určují vzhled výstupu.

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;
   // ...
};

Poznámky

Podporuje manipulátory v ios.

Typ je bitová maska typu, který popisuje objekt, který může ukládat příznaky formátu. Jedinečné hodnoty příznaku (elementy) jsou:

  • dec, chcete-li vložit nebo extrahovat celočíselné hodnoty v desítkovém formátu.

  • hex, chcete-li vložit nebo extrahovat celočíselné hodnoty v šestnáctkovém formátu.

  • oct, chcete-li vložit nebo extrahovat celočíselné hodnoty v osmičkovém formátu.

  • showbase– vložíte předponu, která odhalí základ vygenerovaného celočíselného pole.

  • internal– pokud chcete vložit šířku pole podle potřeby vložením znaků výplně do vygenerovaného číselného pole interně. (Informace o nastavení šířky pole najdete v tématu setw).

  • left– pokud chcete vložit šířku pole podle potřeby vložením znaků výplně na konec vygenerovaného pole (zarovnání vlevo).

  • right– pokud chcete vložit šířku pole podle potřeby vložením znaků výplně na začátek vygenerovaného pole (pravé odůvodnění).

  • boolalpha, chcete-li vložit nebo extrahovat objekty typu bool jako názvy (například true a false) místo jako číselné hodnoty.

  • fixed, chcete-li vložit hodnoty s plovoucí desetinnou čárkou ve formátu s pevnou čárkou (bez exponentového pole).

  • scientificvloží hodnoty s plovoucí desetinnou čárkou ve vědeckém formátu (s exponentovým polem).

  • showpoint– pokud chcete do vygenerovaného pole s plovoucí desetinnou čárkou vložit desetinnou čárku bezpodmínečně.

  • showpos– pokud chcete vložit znaménko plus do nenegativního číselného pole.

  • skipws, chcete-li přeskočit úvodní prázdné znaky před určitými extrakcemi.

  • unitbuf, pro vyprázdnění výstupu po každém vložení.

  • uppercase, chcete-li v některých vloženích vložit velká písmena s velkými písmeny.

Kromě toho je několik užitečných hodnot:

  • adjustfield, bitová maska definovaná jako internal | left | right

  • basefield, definováno jako dec | hex | oct

  • floatfield, definováno jako fixed | scientific

Příklady funkcí, které upravují tyto příznaky formátu, naleznete v tématu <iomanip>.

getloc

Vrátí uložený locale objekt.

locale getloc() const;

Návratová hodnota

Uložený locale objekt.

Příklad

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

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

imbue

Změní národní prostředí.

locale imbue(const locale& _Loc);

Parametry

_Loc
Nové nastavení národního prostředí.

Návratová hodnota

Předchozí národní prostředí.

Poznámky

Členské funkce ukládá _Loc do objektu locale a poté hlásí událost zpětného volání a imbue_event. Vrátí předchozí uloženou hodnotu.

Příklad

Podívejte se basic_ios::imbue na ukázku.

Init

Vytvoří standardní iostream objekty při vytváření.

class Init { };

Poznámky

Vnořená třída popisuje objekt, jehož konstrukce zajišťuje, že standardní iostream objekty jsou správně sestaveny, i před spuštěním konstruktoru pro libovolný statický objekt.

ios_base

Vytváří objekty ios_base .

ios_base();

Poznámky

Konstruktor (chráněný) nedělá nic. Pozdější volání basic_ios::inicializace musí inicializovat objekt dříve, než bude možné bezpečně zničit. Jediným bezpečným použitím třídy ios_base je tedy základní třída pro šablonu basic_iostřídy .

iostate

Typ konstant, které popisují stav datového proudu.

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;
   // ...
};

Poznámky

Typ je bitová maska typu, který popisuje objekt, který může ukládat informace o stavu datového proudu. Jedinečné hodnoty příznaku (elementy) jsou:

  • badbit, pro zaznamenání ztráty integrity vyrovnávací paměti datového proudu.
  • eofbit– k zaznamenání koncového souboru při extrahování ze streamu.
  • failbit– pro zaznamenání selhání extrahování platného pole z datového proudu

Kromě toho je goodbitužitečná hodnota , kde žádná z dříve zmíněných bitů není nastavena (goodbit je zaručeno, že je nula).

iword

Přiřadí hodnotu, která má být uložena iwordjako .

long& iword(int idx);

Parametry

idx
Index hodnoty, která se má uložit jako iword.

Poznámky

Členské funkce vrátí odkaz na idx prvku rozšiřitelného pole s prvky typu long. Všechny prvky jsou efektivně přítomny a zpočátku ukládají hodnotu nula. Vrácený odkaz je neplatný po dalším volání iword objektu po změně objektu voláním basic_ios::copyfmtnebo po zničení objektu.

Pokud idx je záporné nebo pokud není pro prvek k dispozici jedinečné úložiště, funkce volá setstate(badbit) a vrací odkaz, který nemusí být jedinečný.

Chcete-li získat jedinečný index, pro použití ve všech objektech typu ios_base, volání xalloc.

Příklad

Podívejte se xalloc na ukázku použití iword.

openmode

Popisuje, jak pracovat s datovým proudem.

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;
   // ...
};

Poznámky

Režim otevření pro několik iostream objektů. Hodnoty příznaku jsou:

Konstanta Účinnost
app Hledání na konec datového proudu před každým zápisem
ate Okamžitě po otevření vyhledejte konec datového proudu.
binary Otevřete v binárním režimu. (Viz fopen popis binárního režimu.)
in Otevřít pro čtení
out Otevřít pro psaní
trunc Odstranění obsahu souboru po otevření

Příklad

// 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=

Operátor přiřazení pro ios_base objekty.

ios_base& operator=(const ios_base& right);

Parametry

right
Objekt typu ios_base.

Návratová hodnota

Objekt, ke kterému je přiřazen.

Poznámky

Operátor zkopíruje uložené informace o formátování a vytvoří novou kopii všech rozšiřitelných polí. Pak se vrátí *this. Zásobník zpětného volání se nezkopíruje.

Tento operátor je používán pouze třídami odvozenými z ios_base.

precision

Určuje počet číslic, které se mají zobrazit v čísle s plovoucí desetinou čárkou.

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

Parametry

_Prec
Počet významných číslic, které se mají zobrazit, nebo počet číslic za desetinnou čárkou v pevném zápisu.

Návratová hodnota

První členová funkce vrátí uloženou přesnost zobrazení. Druhá členová funkce uloží _Prec přesnost zobrazení a vrátí její předchozí uloženou hodnotu.

Poznámky

Čísla s plovoucí desetinou čárkou se zobrazují v pevném zápisu s fixed.

Příklad

// 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

Přiřadí hodnotu, která má být uložena pwordjako .

void *& pword(int index);

Parametry

index
Index hodnoty, která se má uložit jako pword.

Poznámky

Členová funkce vrátí odkaz na index prvku rozšiřitelného pole s prvky ukazatele typuvoid. Všechny prvky jsou efektivně přítomny a zpočátku ukládají ukazatel null. Vrácený odkaz je neplatný po dalším volání pword objektu po změně objektu voláním basic_ios::copyfmtnebo po zničení objektu.

Pokud je index záporný nebo pokud není pro prvek k dispozici jedinečné úložiště, funkce zavolá setstate(badbit) a vrátí odkaz, který nemusí být jedinečný.

Chcete-li získat jedinečný index, pro použití ve všech objektech typu ios_base, volání xalloc.

Příklad

Podívejte se xalloc na příklad použití pword.

register_callback

Určuje funkci zpětného volání.

void register_callback(
    event_callback pfn, int idx);

Parametry

pfn
Ukazatel na funkci zpětného volání.

idx
Uživatelem definované číslo.

Poznámky

Členová funkce nasdílí dvojici {pfn, idx} do zásobníku zpětného volání uloženého zásobníku zpětného volání. Pokud je hlášena událost zpětného volání ev , funkce jsou volány v obráceném pořadí registru výrazem (*pfn)(ev, *this, idx).

Příklad

// 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

Určuje výchozí bod pro operace posunu.

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

Poznámky

Typ je výčtový typ, který popisuje objekt, který může uložit režim hledání použitý jako argument pro členské funkce několika iostream tříd. Jedinečné hodnoty příznaku jsou:

  • beg– chcete-li vyhledat (změnit aktuální pozici čtení nebo zápisu) vzhledem k začátku sekvence (pole, stream nebo soubor).

  • cur, pro hledání relativní vzhledem k aktuální pozici v posloupnosti.

  • end, aby se vyhledaly vzhledem ke konci sekvence.

Příklad

// 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

Nastaví zadané příznaky.

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

Parametry

_Mask
Příznaky, které se mají zapnout.

_Unset
Příznaky, které se mají vypnout.

Návratová hodnota

Příznaky předchozího formátu

Poznámky

První členová funkce efektivně volá flags(_Mask | _Flags) (nastavte vybrané bity) a poté vrátí příznaky předchozího formátu. Druhá členová funkce efektivně volá flags(_Mask & fmtfl, flags & ~_Mask) (nahradí vybrané bity pod maskou) a vrátí příznaky předchozího formátu.

Příklad

// 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

Zajišťuje, aby iostream operace knihovny runtime jazyka C probíhaly v pořadí, v jakém se zobrazují ve zdrojovém kódu.

static bool sync_with_stdio(
   bool _Sync = true
);

Parametry

_Sync
Zda jsou všechny streamy synchronizované s stdio.

Návratová hodnota

Předchozí nastavení této funkce

Poznámky

Statická členová funkce ukládá stdio příznak synchronizace, který je původně true. Pokud truetento příznak zajistí, že se operace ve stejném souboru správně synchronizují mezi iostreams funkcemi a funkcemi definovanými ve standardní knihovně jazyka C++. Jinak synchronizace může nebo nemusí být zaručená, ale může se zlepšit výkon. Funkce se uloží _Sync do příznaku stdio synchronizace a vrátí předchozí uloženou hodnotu. Můžete ho volat spolehlivě pouze před provedením jakýchkoli operací na standardních datových proudech.

unsetf

Vypne zadané příznaky.

void unsetf(
   fmtflags _Mask
);

Parametry

_Mask
Příznaky, které chcete vypnout.

Poznámky

Členová funkce efektivně volá flags(~_Mask & flags) (vymaže vybrané bity).

Příklad

Podívejte ios_base::setf se na ukázku použití unsetf.

width

Nastaví délku výstupního datového proudu.

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

Parametry

_Wide
Požadovaná velikost výstupního streamu.

Návratová hodnota

Nastavení aktuální šířky.

Poznámky

První členová funkce vrátí uloženou šířku pole. Druhá členová funkce se uloží _Wide do šířky pole a vrátí předchozí uloženou hodnotu.

Příklad

// 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

Určuje, že proměnná je součástí datového proudu.

static int xalloc( );

Návratová hodnota

Statická členová funkce vrátí uloženou statickou hodnotu, která se zvýší při každém volání.

Poznámky

Návratovou hodnotu můžete použít jako jedinečný argument indexu při volání členských funkcí iword nebo pword.

Příklad

// 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

Viz také

Bezpečný přístup z více vláken ve standardní knihovně C++
iostream – programování
iostreams – konvence