Класс 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 |
Битовая маска, определенная как internal right | left | . |
app |
Задает поиск до конца потока перед каждой вставкой. |
ate |
Задает поиск до конца потока при первом создании его управляющего объекта. |
badbit |
Регистрирует потерю целостности буфера потока. |
basefield |
Битовая маска, определенная как dec oct | 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