Класс basic_ios
Шаблон класса описывает функции хранилища и члена, общие для входных потоков (шаблона basic_istream
класса) и выходных потоков (шаблона basic_ostream
класса), которые зависят от параметров шаблона шаблона. (Класс ios_base
описывает, что является общим и не зависит от параметров шаблона.) Объект класса basic_ios<class Elem, class Traits>
помогает управлять потоком с элементами типа Elem
, признаки символов которых определяются классом Traits
.
Синтаксис
template <class Elem, class Traits>
class basic_ios : public ios_base
Параметры
Elem
Тип символа.
Traits
Тип, предоставляющий сведения о типе символа, по умолчанию используется char_traits < Elem >
.
Замечания
Объект класса basic_ios<class Elem, class Traits>
хранит:
Указатель на объект типа
basic_istream<Elem, Traits>
.Указатель буфера потока на объект типа
basic_streambuf<Elem, Traits >
.Поток сведений о состоянии в базовом объекте типа
ios_base
.Символ заполнения в объекте типа
char_type
.
Дополнительные сведения см. в разделах basic_istream
и basic_streambuf
.
Конструкторы
Конструктор | Description |
---|---|
basic_ios |
Создает класс basic_ios . |
Определения типов
Введите имя | Description |
---|---|
char_type |
Синоним параметра шаблона Elem . |
int_type |
Синоним для Traits::int_type . |
off_type |
Синоним для Traits::off_type . |
pos_type |
Синоним для Traits::pos_type . |
traits_type |
Синоним параметра шаблона Traits . |
Функции элементов
Функция-член | Description |
---|---|
bad |
Сообщает о потере целостности буфера потока. |
clear |
Очищает все флаги ошибок. |
copyfmt |
Копирует флаги из одного потока в другой. |
eof |
Указывает, достигнут ли конец потока. |
exceptions |
Указывает, какие исключения будут создаваться потоком. |
fail |
Сообщает об ошибке при извлечении допустимого поля из потока. |
fill |
Указывает или возвращает символ, который будет использоваться, если текст не так широк, как поток. |
good |
Указывает, что поток находится в хорошем состоянии. |
imbue |
Изменяет языковой стандарт. |
init |
Вызывается конструкторами basic_ios . |
move |
Перемещает все значения, кроме указателя на буфер потока, из параметра в текущий объект. |
narrow |
Находит эквивалентный char для данного char_type . |
rdbuf |
Направляет поток в указанный буфер. |
rdstate |
Считывает состояние битов для флагов. |
set_rdbuf |
Назначает буфер потока буфером чтения для этого объекта потока. |
setstate |
Устанавливает дополнительные флаги. |
swap |
Меняет местами значения в этом объекте basic_ios и значения другого объекта basic_ios . Указатели на буферы потока не переключились. |
tie |
Гарантирует, что один поток обрабатывается до другого потока. |
widen |
Находит эквивалент char_type для указанного char. |
Операторы
Operator | Description |
---|---|
explicit operator bool |
Позволяет использовать объект basic_ios как bool . Автоматическое преобразование типов отключено для предотвращения распространенных непредвиденных побочных эффектов. |
operator void * |
Указывает, находится ли поток по-прежнему в хорошем состоянии. |
operator! |
Указывает, не является ли поток плохим. |
Требования
Заголовок: <ios>
Пространство имен: std
basic_ios::bad
Сообщает о потере целостности буфера потока.
bool bad() const;
Возвращаемое значение
Значение true
, если rdstate & badbit
не равно нулю; в противном случае — значение false
.
Дополнительные сведения о методе badbit
см. в разделе ios_base::iostate
.
Пример
// basic_ios_bad.cpp
// compile with: /EHsc
#include <iostream>
int main( void )
{
using namespace std;
bool b = cout.bad( );
cout << boolalpha;
cout << b << endl;
b = cout.good( );
cout << b << endl;
}
basic_ios::basic_ios
Создает класс basic_ios
.
explicit basic_ios(basic_streambuf<Elem, Traits>* sb);
basic_ios();
Параметры
sb
Стандартный буфер для хранения элементов ввода или вывода.
Замечания
Первый конструктор инициализирует объекты-члены путем вызова init(_ Sb)
. Второй (защищенный) конструктор оставляет свои объекты-члены не инициализированными. Последующий вызов init
должен инициализировать объект, прежде чем его можно будет безопасно уничтожить.
basic_ios::char_type
Синоним параметра шаблона Elem
.
typedef Elem char_type;
basic_ios::clear
Очищает все флаги ошибок.
void clear(iostate state = goodbit, bool reraise = false);
void clear(io_state state);
Параметры
state
(Необязательно) Флаги, которые необходимо задать после очистки всех флагов. По умолчанию — goodbit
.
reraise
(Необязательно) Указывает, следует ли повторно создавать исключение. Значение false
по умолчанию (не будет повторно вызывать исключение).
Замечания
Флаги: goodbit
, failbit
eofbit
и badbit
. Проверка для этих флагов с помощью good
, bad
и eof
fail
Функция-член заменяет сохраненную информацию о состоянии потока на следующее:
state | (rdbuf != 0 goodbit : badbit)
Если state&exceptions
это ненулевое значение, он создает объект класса failure
.
Дополнительные сведения см. в разделах rdbuf
и exceptions
.
Пример
См rdstate
. примеры getline
использования clear
.
basic_ios::copyfmt
Копирует флаги из одного потока в другой.
basic_ios<Elem, Traits>& copyfmt(
const basic_ios<Elem, Traits>& right);
Параметры
right
Поток, флаги которого требуется скопировать.
Возвращаемое значение
Объект this
для потока, в который копируется флаги.
Замечания
Функция-член сообщает событие erase_event
обратного вызова. Затем он копируется из right
*this
символа заливки, указателя галстука и сведений о форматировании. Перед изменением маски исключения он сообщает о событии copyfmt_event
обратного вызова. Если после завершения копирования ненулевое значение, state&exceptions
функция фактически вызывает clear
аргумент rdstate
. Он возвращает *this
.
Пример
// basic_ios_copyfmt.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>
int main( )
{
using namespace std;
ofstream x( "test.txt" );
int i = 10;
x << showpos;
cout << i << endl;
cout.copyfmt( x );
cout << i << endl;
}
basic_ios::eof
Указывает, достигнут ли конец потока.
bool eof() const;
Возвращаемое значение
Значение true
достигло конца потока; в противном случае — значение false
.
Замечания
Функция-член возвращается true
, если rdstate
& eofbit
ненулевое значение. Дополнительные сведения о методе eofbit
см. в разделе ios_base::iostate
.
Пример
// basic_ios_eof.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>
using namespace std;
int main( int argc, char* argv[] )
{
fstream fs;
int n = 1;
fs.open( "basic_ios_eof.txt" ); // an empty file
cout << boolalpha
cout << fs.eof() << endl;
fs >> n; // Read the char in the file
cout << fs.eof() << endl;
}
basic_ios::exceptions
Указывает, какие исключения будут создаваться потоком.
iostate exceptions() const;
void exceptions(iostate Newexcept);
void exceptions(io_state Newexcept);
Параметры
Newexcept
Флаги, которые должны вызывать исключение.
Возвращаемое значение
Флаги, которые в настоящее время указываются для создания исключения для потока.
Замечания
Первая функция-член возвращает сохраненную маску исключения. Вторая функция-член хранится _Except
в маске исключения и возвращает предыдущее сохраненное значение. Сохранение новой маски исключений может вызывать исключение так же, как вызов clear
( rdstate
).
Пример
// basic_ios_exceptions.cpp
// compile with: /EHsc /GR
#include <iostream>
int main( )
{
using namespace std;
cout << cout.exceptions( ) << endl;
cout.exceptions( ios::eofbit );
cout << cout.exceptions( ) << endl;
try
{
cout.clear( ios::eofbit ); // Force eofbit on
}
catch ( exception &e )
{
cout.clear( );
cout << "Caught the exception." << endl;
cout << "Exception class: " << typeid(e).name() << endl;
cout << "Exception description: " << e.what() << endl;
}
}
0
1
Caught the exception.
Exception class: class std::ios_base::failure
Exception description: ios_base::eofbit set
basic_ios::fail
Сообщает об ошибке при извлечении допустимого поля из потока.
bool fail() const;
Возвращаемое значение
true
Значение rdstate & (badbit|failbit)
if is nonzero, в противном случае false
.
Дополнительные сведения о методе failbit
см. в разделе ios_base::iostate
.
Пример
// basic_ios_fail.cpp
// compile with: /EHsc
#include <iostream>
int main( void )
{
using namespace std;
bool b = cout.fail( );
cout << boolalpha;
cout << b << endl;
}
basic_ios::fill
Указывает или возвращает символ, который будет использоваться, если текст не так широк, как поток.
char_type fill() const;
char_type fill(char_type Char);
Параметры
Char
Символ, который нужно использовать в качестве символа заливки.
Возвращаемое значение
Текущий символ заливки.
Замечания
Первая функция-член возвращает сохраненный символ заливки. Вторая функция-член сохраняет Char
в символе заливки и возвращает его ранее сохраненное значение.
Пример
// basic_ios_fill.cpp
// compile with: /EHsc
#include <iostream>
#include <iomanip>
int main( )
{
using namespace std;
cout << setw( 5 ) << 'a' << endl;
cout.fill( 'x' );
cout << setw( 5 ) << 'a' << endl;
cout << cout.fill( ) << endl;
}
a
xxxxa
x
basic_ios::good
Указывает, что поток находится в хорошем состоянии.
bool good() const;
Возвращаемое значение
true
Значение if rdstate == goodbit
(флаги состояния не заданы), в противном случае false
.
Дополнительные сведения о методе goodbit
см. в разделе ios_base::iostate
.
Пример
См. basic_ios::bad
с примером использования good
.
basic_ios::imbue
Изменяет языковой стандарт.
locale imbue(const locale& Loc);
Параметры
Loc
Строка языкового стандарта.
Возвращаемое значение
Предыдущий языковой стандарт.
Замечания
Если rdbuf
указатель не NULL
является указателем, вызов функции-член
rdbuf-> pubimbue(_ Loc)
В любом случае она возвращает ios_base::imbue(_ Loc)
.
Дополнительные сведения см. в разделах pubimbue
и ios_base::imbue
.
Пример
// basic_ios_imbue.cpp
// compile with: /EHsc
#include <iostream>
#include <locale>
int main( )
{
using namespace std;
cout.imbue( locale( "french_france" ) );
double x = 1234567.123456;
cout << x << endl;
}
basic_ios::init
Вызывается конструкторами basic_ios
.
void init(basic_streambuf<Elem,Traits>* _Sb, bool _Isstd = false);
Параметры
_Sb
Стандартный буфер для хранения элементов ввода или вывода.
_Isstd
Указывает, является ли этот поток стандартным.
Замечания
Функция-член сохраняет значения во всех объектах-членах, так что:
rdbuf
возвращает_Sb
.tie
NULL
возвращает указатель.rdstate
возвращает значениеgoodbit
, если_Sb
ненулевое значение; в противном случае возвращаетсяbadbit
.exceptions
возвращаетgoodbit
.flags
возвращаетskipws | dec
. Дополнительные сведения см. в разделахskipws
иdec
.width
возвращает значение 0.precision
возвращает 6.fill
возвращает символ пробела.getloc
возвращаетlocale::classic
.iword
возвращает ноль иpword
возвращаетNULL
указатель для всех значений аргументов.
basic_ios::int_type
Синоним для traits_type::int_type
.
typedef typename traits_type::int_type int_type;
basic_ios::move
Перемещает все значения, кроме указателя на буфер потока, из параметра в текущий объект.
void move(basic_ios&& right);
Параметры
right
Объект ios_base
, из которого будут перемещаться значения.
Замечания
Защищенная функция-член перемещает все значения, хранящиеся в right
*this
right
, за исключением хранимогоstream buffer pointer
, который не изменяется и установлен на NULL
указатель.*this
Хранящийся tie pointer
объект имеет NULL
указатель right
.
basic_ios::narrow
Находит эквивалентный char для данного char_type
.
char narrow(char_type Char, char Default = '\0') const;
Параметры
Char
Объект char
для преобразования.
Default
char
, который должен возвращаться, если эквивалент не будет найден.
Возвращаемое значение
Эквивалент char
для указанного char_type
.
Замечания
Функция-член возвращает значение use_facet<ctype<E>>(getloc()).narrow(Char, Default)
.
Дополнительные сведения см. в разделах use_facet
и getloc
.
Пример
// basic_ios_narrow.cpp
// compile with: /EHsc
#include <ios>
#include <iostream>
#include <wchar.h>
int main( )
{
using namespace std;
wchar_t *x = L"test";
char y[10];
cout << x[0] << endl;
wcout << x << endl;
y[0] = wcout.narrow( x[0] );
cout << y[0] << endl;
}
basic_ios::off_type
Синоним для traits_type::off_type
.
typedef typename traits_type::off_type off_type;
basic_ios::operator void *
Указывает, находится ли поток по-прежнему в хорошем состоянии.
operator void *() const;
Возвращаемое значение
Оператор возвращает NULL
указатель только в том случае fail
.
Пример
// basic_ios_opgood.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
using namespace std;
cout << (bool)(&cout != 0) << endl; // Stream is still good
}
1
basic_ios::operator!
Указывает, не является ли поток плохим.
bool operator!() const;
Возвращаемое значение
Возвращает то же, что и вызов basic_ios::fail
Пример
// basic_ios_opbad.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
using namespace std;
cout << !cout << endl; // Stream is not bad
}
0
basic_ios::operator bool
Позволяет использовать объект basic_ios
как bool
. Автоматическое преобразование типов отключено для предотвращения распространенных непредвиденных побочных эффектов.
explicit operator bool() const;
Замечания
Возвращает, true
если поток не имеет ошибок; в противном случае false
.
basic_ios::pos_type
Синоним для traits_type::pos_type
.
typedef typename traits_type::pos_type pos_type;
basic_ios::rdbuf
Направляет поток в указанный буфер.
basic_streambuf<Elem, Traits> *rdbuf() const;
basic_streambuf<Elem, Traits> *rdbuf(
basic_streambuf<Elem, Traits>* _Sb);
Параметры
_Sb
Поток.
Замечания
Первая функция-член возвращает сохраненный указатель буфера потока.
Вторая функция-член сохраняет _Sb
в сохраненном указателе буфера потока и возвращает ранее сохраненное в нем значение.
Пример
// basic_ios_rdbuf.cpp
// compile with: /EHsc
#include <ios>
#include <iostream>
#include <fstream>
int main( )
{
using namespace std;
ofstream file( "rdbuf.txt" );
streambuf *x = cout.rdbuf( file.rdbuf( ) );
cout << "test" << endl; // Goes to file
cout.rdbuf(x);
cout << "test2" << endl;
}
test2
basic_ios::rdstate
Считывает состояние ошибки потока.
iostate rdstate() const;
Возвращаемое значение
Сведения о состоянии сохраненного потока.
Пример
// basic_ios_rdstate.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>
using namespace std;
void TestFlags( ios& x )
{
cout << ( x.rdstate( ) & ios::badbit ) << endl;
cout << ( x.rdstate( ) & ios::failbit ) << endl;
cout << ( x.rdstate( ) & ios::eofbit ) << endl;
cout << endl;
}
int main( )
{
fstream x( "c:\test.txt", ios::out );
x.clear( );
TestFlags( x );
x.clear( ios::badbit | ios::failbit | ios::eofbit );
TestFlags( x );
}
0
0
0
4
2
1
basic_ios::setstate
Задает указанные флаги ошибок потока (в настоящее время установленные флаги состояния ошибки потока остаются неизменными):
flag | Description |
---|---|
goodbit |
Без ошибок |
badbit |
Неустранимая ошибка |
failbit |
Сбой операции ввода-вывода, например ошибка форматирования или извлечения |
eofbit |
Поток достиг конца файла |
void setstate(iostate _State);
Параметры
_State
Дополнительные флаги для установки.
Замечания
Функция-член по существу вызывает clear(_ state | rdstate)
.
Дополнительные сведения см. в разделах clear
и rdstate
.
Пример
// basic_ios_setstate.cpp
// compile with: /EHsc
#include <ios>
#include <iostream>
using namespace std;
int main( )
{
bool b = cout.bad( );
cout << b << endl; // Good
cout.clear( ios::badbit );
b = cout.bad( );
// cout.clear( );
cout << b << endl; // Is bad, good
b = cout.fail( );
cout << b << endl; // Not failed
cout.setstate( ios::failbit );
b = cout.fail( );
cout.clear( );
cout << b << endl; // Is failed, good
return 0;
}
0
1
basic_ios::set_rdbuf
Назначает буфер потока буфером чтения для этого объекта потока.
void set_rdbuf(
basic_streambuf<Elem, Tr>* strbuf)
Параметры
strbuf
Буфер потока, который должен стать буфером чтения.
Замечания
Защищенная функция-член хранится strbuf
в указателе буфера потока. Он не вызывает clear
.
basic_ios::tie
Гарантирует, что один поток обрабатывается до другого потока.
basic_ostream<Elem, Traits> *tie() const;
basic_ostream<Elem, Traits> *tie(
basic_ostream<Elem, Traits>* str);
Параметры
str
Поток.
Возвращаемое значение
Первая функция-член возвращает сохраненный указатель tie. Вторая функция-член сохраняет str
в указателе tie и возвращает его ранее сохраненное значение.
Замечания
tie
вызывает синхронизацию двух потоков, так что операции в одном потоке операций происходят после завершения операций в другом потоке.
Пример
В следующем примере, привязав cin
cout
его к, гарантируется, что Enter a number:
строка перейдет в консоль, прежде чем сам номер извлекается из cin
. Это исключает возможность того, что строка "Ввод числа:" по-прежнему сидит в буфере, когда число считывается, чтобы мы уверены, что пользователь фактически имеет некоторое предложение ответить. По умолчанию cin
и cout
привязаны.
#include <ios>
#include <iostream>
int main( )
{
using namespace std;
int i;
cin.tie( &cout );
cout << "Enter a number:";
cin >> i;
}
basic_ios::traits_type
Синоним параметра шаблона Traits
.
typedef Traits traits_type;
basic_ios::widen
Находит эквивалент char_type
для указанного char
.
char_type widen(char Char) const;
Параметры
Char
Символ для преобразования.
Возвращаемое значение
Находит эквивалент char_type
для указанного char
.
Замечания
Функция-член возвращает значение use_facet<ctype<E>>(getloc).widen(Char)
.
Дополнительные сведения см. в разделах use_facet
и getloc
.
Пример
// basic_ios_widen.cpp
// compile with: /EHsc
#include <ios>
#include <iostream>
#include <wchar.h>
int main( )
{
using namespace std;
char *z = "Hello";
wchar_t y[2] = {0,0};
cout << z[0] << endl;
y[0] = wcout.widen( z[0] );
wcout << &y[0] << endl;
}
basic_ios::swap
Меняет местами значения в этом объекте basic_ios
и значения другого объекта basic_ios
. Однако указатели на буферы потока не переключились.
void swap(basic_ios&& right);
Параметры
right
Объект basic_ios
, используемый для обмена значений.
Замечания
Защищенная функция-член меняет обменивает все значения, хранящиеся в right
, со значениями *this
, за исключением сохраненного stream buffer pointer
.
См. также
Потокобезопасность в стандартной библиотеке C++
iostream
Программирование
iostreams
Конвенций