Класс 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<< Записывает данные в поток.

Requirements

Заголовок:<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, getlocval). 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, getlocval. Здесь 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(rdbufgetloc), *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
Позиция в потоке.

_Off
Смещение относительно _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.хорошо и trueostr.Галстук не является пустым указателем, конструктор вызывает ostr.tie-flush>. Затем конструктор сохраняет значение, возвращаемое ostr.good в status. Последующий вызов для operator bool доставки этого сохраненного значения.

Если возвращается и флаги&unitbuf ненулевое, деструктор вызывает очистку.falseuncaught_exception

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