Класс basic_ostream
Этот шаблон класса описывает объект, который управляет вставкой элементов и закодированными объектами в буфер потока с элементами типа Elem
, также известным как char_type, признаки символов которого определяются классом Tr
, также известным как traits_type.
Синтаксис
template <class Elem, class Tr = char_traits<Elem>>
class basic_ostream : virtual public basic_ios<Elem, Tr>
Параметры
Elem
char_type
.
Tr
traits_type
символа.
Замечания
Большинство функций-членов, которые оператор<< перегрузки форматируют выходные функции. Они следуют этому шаблону:
iostate state = goodbit;
const sentry ok(*this);
if (ok)
{try
{<convert and insert elements
accumulate flags in state> }
catch (...)
{try
{setstate(badbit);
}
catch (...)
{}
if ((exceptions()& badbit) != 0)
throw; }}
width(0);
// Except for operator<<(Elem)
setstate(state);
return (*this);
Две другие функции-члены — это неформатированные выходные функции. Они следуют этому шаблону:
iostate state = goodbit;
const sentry ok(*this);
if (!ok)
state |= badbit;
else
{try
{<obtain and insert elements
accumulate flags in state> }
catch (...)
{try
{setstate(badbit);
}
catch (...)
{}
if ((exceptions()& badbit) != 0)
throw; }}
setstate(state);
return (*this);
Обе группы функций вызывают setstate(badbit), если при вставке элементов возникают сбои.
Объект класса basic_istream Elem, Tr> сохраняет только виртуальный общедоступный базовый объект класса basic_ios<<Elem, Tr.>
Пример
Дополнительные сведения о выходных потоках см. в примере для класса basic_ofstream.
Конструкторы
Конструктор | Description |
---|---|
basic_ostream | Формирует объект basic_ostream . |
Функции элементов
Функция-член | Description |
---|---|
flush | Очищает буфер. |
put | Помещает символ в поток. |
seekp | Сбрасывает позицию в потоке вывода. |
sentry | Вложенный класс описывает объект, объявление которого структурирует форматированные и неформатированные выходные функции. |
swap | Меняет местами значения в этом объекте basic_ostream и значения предоставленного объекта basic_ostream . |
tellp | Сообщает позицию в потоке вывода. |
запись | Помещает символы в поток. |
Операторы
Operator | Description |
---|---|
operator= | Присваивает значение указанного параметра объекта basic_ostream этому объекту. |
operator<< | Записывает данные в поток. |
Требования
Заголовок:<ostream>
Пространство имен: std
basic_ostream::basic_ostream
Формирует объект basic_ostream
.
explicit basic_ostream(
basic_streambuf<Elem, Tr>* strbuf,
bool _Isstd = false);
basic_ostream(basic_ostream&& right);
Параметры
strbuf
Объект типа basic_streambuf.
_Isstd
Значение true
, если это стандартный поток; в противном случае — значение false
.
right
Ссылка rvalue на объект типа basic_ostream
.
Замечания
Первый конструктор инициализирует базовый класс путем вызова init(strbuf
). Второй конструктор инициализирует базовый класс путем вызова basic_ios::move(right)
.
Пример
Дополнительные сведения о выходных потоках см. в примере для basic_ofstream::basic_ofstream.
basic_ostream::flush
Очищает буфер.
basic_ostream<Elem, Tr>& flush();
Возвращаемое значение
Ссылка на объект basic_ostream.
Замечания
Если rdbuf не является указателем NULL, функция вызывает rdbuf-pubsync>. Если возвращается значение –1, функция вызывает setstate(badbit). Он возвращает *это.
Пример
// basic_ostream_flush.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
using namespace std;
cout << "test";
cout.flush();
}
test
basic_ostream::operator<<
Записывает данные в поток.
basic_ostream<Elem, Tr>& operator<<(
basic_ostream<Elem, Tr>& (* Pfn)(basic_ostream<Elem, Tr>&));
basic_ostream<Elem, Tr>& operator<<(
ios_base& (* Pfn)(ios_base&));
basic_ostream<Elem, Tr>& operator<<(
basic_ios<Elem, Tr>& (* Pfn)(basic_ios<Elem, Tr>&));
basic_ostream<Elem, Tr>& operator<<(basic_streambuf<Elem, Tr>* strbuf);
basic_ostream<Elem, Tr>& operator<<(bool val);
basic_ostream<Elem, Tr>& operator<<(short val);
basic_ostream<Elem, Tr>& operator<<(unsigned short val);
basic_ostream<Elem, Tr>& operator<<(int __w64 val);
basic_ostream<Elem, Tr>& operator<<(unsigned int __w64 val);
basic_ostream<Elem, Tr>& operator<<(long val);
basic_ostream<Elem, Tr>& operator<<(unsigned long __w64 val);
basic_ostream<Elem, Tr>& operator<<(long long val);
basic_ostream<Elem, Tr>& operator<<(unsigned long long val);
basic_ostream<Elem, Tr>& operator<<(float val);
basic_ostream<Elem, Tr>& operator<<(double val);
basic_ostream<Elem, Tr>& operator<<(long double val);
basic_ostream<Elem, Tr>& operator<<(const void* val);
Параметры
Pfn
Указатель функции.
strbuf
Указатель на объект stream_buf
.
Val
Элемент, записываемый в поток.
Возвращаемое значение
Ссылка на объект basic_ostream.
Замечания
Заголовок <ostream> также определяет несколько глобальных операторов вставки. Дополнительные сведения см. в статье operator<<.
Первая функция-член гарантирует, что выражение формы ostr << endl
вызывает endl(ostr), а затем возвращает *это. Вторая и третья функции обеспечивают аналогичное поведение других манипуляторов, таких как hex. Все остальные функции являются форматированными выходными функциями.
Функция .
basic_ostream<Elem, Tr>& operator<<(basic_streambuf<Elem, Tr>* strbuf);
извлекает элементы из strbuf, если strbuf не является указателем NULL, и вставляет их. Извлечение останавливается в конце файла или если оно создает исключение (которое создается повторно). Оно также останавливается без извлечения соответствующего элемента, если вставка завершается неудачно. Если функция не вставляет элементы или если вставка создает исключение, эта функция вызывает setstate(failbit). В любом случае функция возвращает *это.
Функция .
basic_ostream<Elem, Tr>& operator<<(bool val);
_Val
преобразуется в логическое поле и вставляет его путем вызова use_facet num_put<<Elem, OutIt(
>getloc). put(OutIt(rdbuf), *this, getloc
val). OutIt
Здесь определяется как ostreambuf_iterator<Elem, Tr.> Функция возвращает *this.
Функции
basic_ostream<Elem, Tr>& operator<<(short val);
basic_ostream<Elem, Tr>& operator<<(unsigned short val);
basic_ostream<Elem, Tr>& operator<<(int val);
basic_ostream<Elem, Tr>& operator<<(unsigned int __w64 val);
basic_ostream<Elem, Tr>& operator<<(long val);
basic_ostream<Elem, Tr>& operator<<(unsigned long val);
basic_ostream<Elem, Tr>& operator<<(long long val);
basic_ostream<Elem, Tr>& operator<<(unsigned long long val);
basic_ostream<Elem, Tr>& operator<<(const void* val);
каждый преобразование val в числовое поле и вставка его путем вызова use_facet num_put<<Elem, OutIt>(getloc
). Put(OutIt(rdbuf
), *this, getloc
val. Здесь OutIt определяется как ostreambuf_iterator<Elem, Tr>. Функция возвращает *this.
Функции
basic_ostream<Elem, Tr>& operator<<(float val);
basic_ostream<Elem, Tr>& operator<<(double val);
basic_ostream<Elem, Tr>& operator<<(long double val);
каждый преобразование val в числовое поле и вставка его путем вызова use_facet num_put<<Elem, OutIt>(). put(OutIt(rdbuf
getloc
), *this, getloc
, val). Здесь OutIt определяется как ostreambuf_iterator<Elem, Tr>. Функция возвращает *this.
Пример
// basic_ostream_op_write.cpp
// compile with: /EHsc
#include <iostream>
#include <string.h>
using namespace std;
ios_base& hex2( ios_base& ib )
{
ib.unsetf( ios_base::dec );
ib.setf( ios_base::hex );
return ib;
}
basic_ostream<char, char_traits<char> >& somefunc(basic_ostream<char, char_traits<char> > &i)
{
if (i == cout)
{
i << "i is cout" << endl;
}
return i;
}
class CTxtStreambuf : public basic_streambuf< char, char_traits< char > >
{
public:
CTxtStreambuf(char *_pszText)
{
pszText = _pszText;
setg(pszText, pszText, pszText + strlen(pszText));
};
char *pszText;
};
int main()
{
cout << somefunc;
cout << 21 << endl;
hex2(cout);
cout << 21 << endl;
CTxtStreambuf f("text in streambuf");
cout << &f << endl;
}
basic_ostream::operator=
Присваивает значения указанного параметра объекта basic_ostream
этому объекту.
basic_ostream& operator=(basic_ostream&& right);
Параметры
right
Ссылка rvalue
на объект basic_ostream
.
Замечания
Оператор-член вызывает swap (right)
.
basic_ostream::p ut
Помещает символ в поток.
basic_ostream<Elem, Tr>& put(char_type _Ch);
Параметры
_Ch
Символ.
Возвращаемое значение
Ссылка на объект basic_ostream.
Замечания
Неформатированная выходная функция вставляет элемент _Ch. Он возвращает *это.
Пример
// basic_ostream_put.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
using namespace std;
cout.put( 'v' );
cout << endl;
wcout.put( L'l' );
}
v
l
basic_ostream::seekp
Сбрасывает позицию в выходном потоке.
basic_ostream<Elem, Tr>& seekp(pos_type _Pos);
basic_ostream<Elem, Tr>& seekp(off_type _Off, ios_base::seekdir _Way);
Параметры
_Pos
Позиция в потоке.
_От
Смещение относительно _Way.
_Способ
Одно из перечислений ios_base::seekdir.
Возвращаемое значение
Ссылка на объект basic_ostream.
Замечания
Если произошел сбойfalse
, первая функция-член вызывает newpos = rdbuf-pubseekpos>(_Pos), для некоторого pos_type
временного объекта.newpos
Если fail
значение равно false, вторая функция вызывает newpos = rdbuf-pubseekoff>(_Off, _Way). В любом случае, если (off_type
)newpos == (off_type
)(–1) (операция размещения завершается неудачно), функция вызывает istr.setstate(failbit). Обе функции возвращают *this.
Пример
// basic_ostream_seekp.cpp
// compile with: /EHsc
#include <fstream>
#include <iostream>
int main()
{
using namespace std;
ofstream x("basic_ostream_seekp.txt");
streamoff i = x.tellp();
cout << i << endl;
x << "testing";
i = x.tellp();
cout << i << endl;
x.seekp(2); // Put char in third char position in file
x << " ";
x.seekp(2, ios::end); // Put char two after end of file
x << "z";
}
0
7
basic_ostream::sentry
Вложенный класс описывает объект, объявление которого структурирует форматированные и неформатированные выходные функции.
class sentry { public: явный sentry(basic_ostream Elem, Tr>& _Ostr<); оператор bool() const; ~sentry(); };
Замечания
Вложенный класс описывает объект, объявление которого структурирует форматированные и неформатированные выходные функции. Если ostr.хорошо и true
ostr.Галстук не является пустым указателем, конструктор вызывает ostr.tie-flush>. Затем конструктор сохраняет значение, возвращаемое ostr.good
в status
. Последующий вызов для operator bool
доставки этого сохраненного значения.
Если uncaught_exception
возвращается false
и флаги и unitbuf ненулевое значение, деструктор вызывает очистку.
basic_ostream::swap
Меняет местами значения в этом объекте basic_ostream
и значения предоставленного объекта basic_ostream
.
void swap(basic_ostream& right);
Параметры
right
Ссылка на объект basic_ostream
.
Замечания
Функция-член вызывает basic_ios::swap(right)
, чтобы обменять содержимое этого объекта на содержимое справа.
basic_ostream::tellp
Сообщает позицию в выходном потоке.
pos_type tellp();
Возвращаемое значение
Позиция в выходном потоке.
Замечания
Если произошел сбойfalse
, функция-член возвращает rdbuf-pubseekoff>(0, cur
в). В противном случае она возвращает pos_type
(–1).
Пример
Пример использования tellp
см. в разделе seekp.
basic_ostream::write
Помещает символы в поток.
basic_ostream<Elem, Tr>& write(const char_type* str, streamsize count);
Параметры
count
Количество символов для помещения в поток.
str
Символы для помещения в поток.
Возвращаемое значение
Ссылка на объект basic_ostream.
Замечания
Неформатированная выходная функция вставляет последовательность элементов счетчика, начиная с str.
Пример
Пример использования write
см. в разделе streamsize.
См. также
Потокобезопасность в стандартной библиотеке C++
Программирование iostream
Соглашения iostreams