Поделиться через


Класс ios_base

Класс описывает функции хранилища и члена, общие для входных и выходных потоков, которые не зависят от параметров шаблона. (Шаблон класса basic_ios описывает, что является общим и зависит от параметров шаблона.)

Объект класса ios_base хранит сведения о форматировании, состоящие из следующих элементов:

  • Форматирование флагов в объекте типа fmtflags.

  • Маска исключения в объекте типа iostate.

  • Ширина поля в объекте типа int.

  • Точность отображения в объекте типа int.

  • locale Объект в объекте типаlocale.

  • Два расширяемых массива с элементами типа long и void указателя.

Объект класса ios_base также хранит сведения о состоянии потока в объекте типа iostateи стек обратного вызова.

Участники

Конструкторы

Имя Описание
ios_base Создает объект ios_base.

Определения типов

Имя Описание
event_callback Описывает функцию, переданную register_callв .
fmtflags Константы для определения внешнего вида выходных данных.
iostate Определяет константы, описывающие состояние потока.
openmode Описывает процесс взаимодействия с потоком.
seekdir Задает начальную точку для операций смещения.

Перечисления

Имя Описание
event Задает типы событий.

Константы

Имя Описание
adjustfield Битовая маска, определенная как internalright | left | .
app Задает поиск до конца потока перед каждой вставкой.
ate Задает поиск до конца потока при первом создании его управляющего объекта.
badbit Регистрирует потерю целостности буфера потока.
basefield Битовая маска, определенная как decoct | hex | .
beg Задает поиск относительно начала последовательности.
binary Указывает, что файл должен быть считан как двоичный, а не текстовый поток.
boolalpha Задает вставку или извлечение объектов типа bool в качестве имен (таких как true и false), а не числовых значений.
cur Задает поиск относительно текущей позиции в последовательности.
dec Задает вставку или извлечение целочисленных значений в десятичном формате.
end Задает поиск относительно конца последовательности.
eofbit Регистрирует конец файла при извлечении из потока.
failbit Регистрирует сбой при извлечении допустимого поля из потока.
fixed Задает вставку значений с плавающей запятой в формате с фиксированной запятой (без поля экспоненты).
floatfield Битовая маска, определенная как fixed | scientific
goodbit Очищает все биты состояния.
hex Задает вставку или извлечение целочисленных значений в шестнадцатеричном формате.
in Задает извлечение из потока.
internal Выполняет заполнение по ширине поля, вставляя символы заполнения в точке внутри созданного числового поля.
left Задает выравнивание по левому краю.
oct Задает вставку или извлечение целочисленных значений в восьмеричном формате.
out Задает вставку в поток.
right Задает выравнивание по правому краю.
scientific Задает вставку значений с плавающей запятой в экспоненциальном формате (с полем экспоненты).
showbase Задает вставку префикса, отображающего базу созданного целочисленного поля.
showpoint Задает безусловную вставку десятичной запятой в созданное поле с плавающей запятой.
showpos Задает вставку знака плюс в созданное неотрицательное числовое поле.
skipws Задает пропуск начальных пробелов перед определенными извлечениями.
trunc Задает удаление содержимого существующего файла при создании его управляющего объекта.
unitbuf Обеспечивает запись выходных данных на диск после каждой вставки.
uppercase Задает вставку эквивалентных прописных букв для букв нижнего регистра в определенных вставках.

Функции

Имя Описание
failure Класс-член служит базовым классом для всех исключений, создаваемых функцией-членом , ясной в шаблоне basic_iosкласса.
flags Задает или возвращает текущие параметры флага.
getloc Возвращает сохраненный locale объект.
imbue Изменяет языковой стандарт.
Init Создает стандартные iostream объекты при создании.
iword Присваивает значение, сохраняемое в виде iword.
precision Задает количество цифр для отображения числа с плавающей запятой.
pword Присваивает значение, сохраняемое в виде pword.
register_callback Задает функцию обратного вызова.
setf Задает указанные флаги.
sync_with_stdio Гарантирует, что iostream и операции библиотеки времени выполнения C выполняются в том порядке, в который они отображаются в исходном коде.
unsetf Отключает указанные флаги.
width Задает длину потока вывода.
xalloc Указывает, что переменная должна быть частью потока.

Операторы

Имя Описание
operator= Оператор присваивания для объектов ios_base.

Требования

Заголовок: <ios>

Пространство имен: std

event

Задает типы событий.

enum event {
    erase_event,
    imbue_event,
    copyfmt_event};

Замечания

Тип — это перечислимый тип, описывающий объект, который может хранить событие обратного вызова, используемое в качестве аргумента для функции, зарегистрированной в register_callback. Различные значения события:

  • copyfmt_event, чтобы определить обратный вызов, который происходит ближе к концу вызова copyfmt, непосредственно перед копированием маски исключения.

  • erase_event, чтобы определить обратный вызов, который происходит в начале вызова или в начале вызова copyfmtдеструктора.*this

  • imbue_event, чтобы определить обратный вызов, который происходит в конце вызова imbue, непосредственно перед возвращением функции.

Пример

Пример см. в разделе register_callback.

event_callback

Описывает функцию, переданную register_callв .

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

Параметры

_E
event.

_Base
Поток, в котором был вызов события.

_I
Определенное пользователем число.

Замечания

Тип описывает указатель на функцию, в которую можно зарегистрировать register_callback. Функции этого типа не должны вызывать исключение.

Пример

Пример register_call использования event_callback.

failure

Класс failure определяет базовый класс для типов всех объектов, вызываемых как исключения, с помощью функций в библиотеке iostreams, для отчетов об ошибках, обнаруженных во время операций буфера потока.

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

Замечания

Значение, возвращаемое what(), — это копия _Message, возможно, дополненная тестом на основе _Code. Если _Code значение по умолчанию не указано, значение make_error_code(io_errc::stream)по умолчанию .

Пример

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

Задает или возвращает текущие параметры флага.

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

Параметры

fmtfl
Новое значение fmtflags.

Возвращаемое значение

Предыдущее или текущее значение fmtflags.

Замечания

См ios_base::fmtflags . список флагов.

Первая функция-член возвращает сохраненные флажки формата. Вторая функция-член сохраняет fmtfl во флажках формата и возвращает свое ранее сохраненное значение.

Пример

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

Константы для определения внешнего вида выходных данных.

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

Замечания

Поддерживает манипуляторы в ios.

Тип — это тип битовой маски, описывающий объект, который может хранить флаги формата. Ниже перечислены значения различных флагов (элементы).

  • dec, чтобы вставить или извлечь целочисленные значения в десятичном формате.

  • hex, чтобы вставить или извлечь целочисленные значения в шестнадцатеричном формате.

  • oct, чтобы вставить или извлечь целочисленные значения в восьмеричном формате.

  • showbase, чтобы вставить префикс, отображающий базу созданного целочисленного поля.

  • internal, чтобы выполнить заполнение по ширине поля, вставляя символы заполнения в точке внутри созданного числового поля. (Сведения о настройке ширины поля см. в разделе setw).

  • left, чтобы выполнить заполнение по ширине поля, вставляя символы заполнения в конец созданного числового поля (выравнивание по левому краю).

  • right, чтобы выполнить заполнение по ширине поля, вставляя символы заполнения в начало созданного числового поля (выравнивание по правому краю).

  • boolalpha, чтобы вставить или извлечь объекты типа bool, например имена (такие как true и false), а не числовые значения.

  • fixed, чтобы вставить значения с плавающей запятой в формате с фиксированной запятой (без поля экспоненты).

  • scientific, чтобы вставить значения с плавающей запятой в экспоненциальном формате (с полем экспоненты).

  • showpoint, чтобы выполнить безусловную вставку десятичной запятой в созданное поле с плавающей запятой.

  • showpos, чтобы вставить знак плюс в созданное неотрицательное числовое поле.

  • skipws, чтобы пропустить начальные пробелы перед определенными извлечениями.

  • unitbuf, чтобы записывать выходные данные на диск после каждой вставки.

  • uppercase, чтобы вставить эквивалентные прописные буквы для букв нижнего регистра в определенных вставках.

Кроме того, ниже приведено несколько полезных значений:

  • adjustfield, битовая маска, определенная как internal | left | right

  • basefield, определенный как dec | hex | oct

  • floatfield, определенный как fixed | scientific

Примеры функций, изменяющих флаги формата, см. в разделе <iomanip>.

getloc

Возвращает сохраненный locale объект.

locale getloc() const;

Возвращаемое значение

Сохраненный locale объект.

Пример

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

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

imbue

Изменяет языковой стандарт.

locale imbue(const locale& _Loc);

Параметры

_Loc
Новое значение языкового стандарта.

Возвращаемое значение

Предыдущий языковой стандарт.

Замечания

Функция-член хранится _Loc в объекте locale , а затем сообщает о событии обратного вызова и imbue_event. Она возвращает предыдущее сохраненное значение.

Пример

См basic_ios::imbue . пример.

Init

Создает стандартные iostream объекты при создании.

class Init { };

Замечания

Вложенный класс описывает объект, строительство которого гарантирует правильность построения стандартных iostream объектов, даже до выполнения конструктора для произвольного статического объекта.

ios_base

Создает объект ios_base.

ios_base();

Замечания

(Защищенный) конструктор ничего не делает. Последующий вызов basic_ios::init должен инициализировать объект, прежде чем он может быть безопасно уничтожен. Таким образом, единственным безопасным использованием для класса ios_base является базовый класс для шаблона basic_iosкласса.

iostate

Тип констант, описывающих состояние потока.

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

Замечания

Тип — это тип битовой маски, описывающий объект, который может хранить данные о состоянии потока. Ниже перечислены значения различных флагов (элементы).

  • badbit регистрирует потерю целостности буфера потока.
  • eofbit регистрирует конец файла при извлечении из потока.
  • failbit регистрирует ошибку извлечения корректного поля из потока.

Кроме того, полезным является значение goodbit, где не устанавливаются никакие из упомянутых ранее бит ( goodbit гарантированно ноль).

iword

Присваивает значение, сохраняемое в виде iword.

long& iword(int idx);

Параметры

idx
Индекс значения для сохранения как iword.

Замечания

Функция-член возвращает ссылку на идентификатор элемента расширяемого массива с элементами типаlong. Все элементы эффективно присутствуют и изначально хранят нулевое значение. Возвращаемая ссылка недопустима после следующего вызова iword объекта, после изменения объекта вызовом basic_ios::copyfmtили после уничтожения объекта.

Если idx для элемента нет отрицательного значения или если уникальное хранилище недоступно, функция вызывает setstate(badbit) и возвращает ссылку, которая может не быть уникальной.

Чтобы получить уникальный индекс, для использования во всех объектах типа ios_base, вызовите xalloc.

Пример

Пример xalloc использования iword.

openmode

Описывает процесс взаимодействия с потоком.

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

Замечания

Режим открытия для нескольких iostream объектов. Значения флага:

Константа Действие
app Поиск конца потока перед каждой записью
ate Поиск конца потока сразу после открытия
binary Открыть в двоичном режиме. (См fopen . описание двоичного режима.)
in Открыть для чтения
out Открытие для написания
trunc Удаление содержимого файла после открытия

Пример

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

Оператор присваивания для объектов ios_base.

ios_base& operator=(const ios_base& right);

Параметры

right
Объект типа ios_base.

Возвращаемое значение

Объект, которому выполняется присваивание.

Замечания

Оператор копирует сохраненные сведения о форматировании, создавая новую копию для любых расширяемых массивов. Затем оно возвращает значение *this. Стек обратного вызова не копируется.

Этот оператор используется только классами, производными от ios_base.

precision

Задает количество цифр для отображения числа с плавающей запятой.

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

Параметры

_Prec
Количество значащих цифр при отображении, или количество цифр после десятичной запятой в фиксированной нотации.

Возвращаемое значение

Первая функция-член возвращает сохраненное количество цифр для отображения. Вторая функция-член сохраняет _Prec в качестве количества цифр для отображения и возвращает свое ранее сохраненное значение.

Замечания

Числа с плавающей запятой отображаются в фиксированной нотации с fixed.

Пример

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

Присваивает значение, сохраняемое в виде pword.

void *& pword(int index);

Параметры

index
Индекс значения для сохранения как pword.

Замечания

Функция-член возвращает ссылку на индекс элемента расширяемого массива с элементами указателя типаvoid. Все элементы эффективно присутствуют и изначально хранят нулевой указатель. Возвращаемая ссылка недопустима после следующего вызова pword объекта, после изменения объекта вызовом basic_ios::copyfmtили после уничтожения объекта.

Если индекс отрицательный, или если уникальное хранилище недоступно для элемента, функция вызывает setstate(badbit) и возвращает ссылку, которая может не быть уникальной.

Чтобы получить уникальный индекс, для использования во всех объектах типа ios_base, вызовите xalloc.

Пример

См. xalloc с примером использования pword.

register_callback

Задает функцию обратного вызова.

void register_callback(
    event_callback pfn, int idx);

Параметры

pfn
Указатель на функцию обратного вызова.

idx
Определенное пользователем число.

Замечания

Функция-член отправляет пару {pfn, idx} в сохраненный стек обратных вызовов стека обратных вызовов. Когда сообщается событие обратного вызова, функции вызываются в обратном порядке реестра выражением(*pfn)(ev, *this, idx).

Пример

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

Задает начальную точку для операций смещения.

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

Замечания

Тип — это перечислимый тип, описывающий объект, который может хранить режим поиска, используемый в качестве аргумента для функций-членов нескольких iostream классов. Ниже перечислены значения различных флагов.

  • beg, чтобы искать (изменить текущую позицию чтения или записи) относительно начала последовательности (массив, поток или файл).

  • cur, чтобы искать относительно текущей позиции в последовательности.

  • end, чтобы искать относительно конца последовательности.

Пример

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

Задает указанные флаги.

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

Параметры

_Mask
Флажки, которые нужно включить.

_Unset
Флаги для отключения.

Возвращаемое значение

Предыдущие флаги форматирования

Замечания

Первая функция-член эффективно вызывает flags(_Mask | _Flags) (задает выбранные биты), а затем возвращает предыдущие флаги формата. Вторая функция-член фактически вызывает flags(_Mask & fmtfl, flags & ~_Mask) (замените выбранные биты под маской), а затем возвращает предыдущие флаги формата.

Пример

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

Гарантирует, что iostream и операции библиотеки времени выполнения C выполняются в том порядке, в который они отображаются в исходном коде.

static bool sync_with_stdio(
   bool _Sync = true
);

Параметры

_Sync
Синхронизированы stdioли все потоки.

Возвращаемое значение

Предыдущий параметр для этой функции.

Замечания

Функция статического члена сохраняет stdio флаг синхронизации, который изначально true. Если trueэтот флаг обеспечивает правильную синхронизацию операций с тем же файлом между iostreams функциями и функциями, определенными в стандартной библиотеке C++. В противном случае синхронизация может быть гарантирована или не гарантируется, но производительность может быть улучшена. Функция сохраняет _Sync в флаге stdio синхронизации и возвращает предыдущее сохраненное значение. Ее можно вызывать надежно только перед выполнением любых операций в стандартных потоках.

unsetf

Отключает указанные флаги.

void unsetf(
   fmtflags _Mask
);

Параметры

_Mask
Флаги, которые требуется отключить.

Замечания

Функция-член эффективно вызывает flags(~_Mask & flags) (очистить выбранные биты).

Пример

См ios_base::setf . пример использования unsetf.

width

Задает длину потока вывода.

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

Параметры

_Wide
Нужный размер выходного потока.

Возвращаемое значение

Текущий параметр ширины.

Замечания

Первая функция-член возвращает ширину сохраненного поля. Вторая функция-член хранится _Wide в ширине поля и возвращает предыдущее сохраненное значение.

Пример

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

Указывает, что переменная является частью потока.

static int xalloc( );

Возвращаемое значение

Функция статического члена возвращает сохраненное статическое значение, которое увеличивается при каждом вызове.

Замечания

Возвращаемое значение можно использовать в качестве уникального аргумента индекса при вызове функций-членов iword или pword.

Пример

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

См. также

Потокобезопасность в стандартной библиотеке C++
Программирование iostream
Соглашения iostreams