Каждая функция форматированного вывода начинает выполнение с создания объекта класса sentry. Если этот объект возвращается true при преобразовании в значение типа bool, функция пытается сгенерировать запрошенный вывод. В случае сбоя генерации выполняется функция форматированного вывода setstate(ios_base::failbit), которая может вызвать исключение. Если во время вывода возникает исключение, то ios::badbit включается320 в *thisсостоянии ошибки. Если (exceptions()&badbit) != 0 тогда исключение генерируется повторно. Независимо от того, выбрасывается ли исключение, sentry объект уничтожается до выхода из функции форматированного вывода. Если исключение не генерируется, результатом функции форматированного вывода будет *this.
Описания отдельных функций форматированного вывода описывают, как они выполняют вывод, и не упоминают sentry объект.
Если функция форматированного вывода потокаos определяет заполнение, это делается следующим образом. Для даннойcharT символьной последовательности,seq где charT - символьный тип потока, если длинаseq меньше чемos.width(), тоos.fill() к этой последовательности добавляется достаточное количество копий, необходимое для заполнения до шириныos.width() символов. Если (os.flags() & ios_base::adjustfield) == ios_base::left есть true, символы заполнения помещаются после последовательности символов; в противном случае они помещаются перед последовательностью символов.
не вызывая ios::failure броска.
operator<<(bool val);
operator<<(short val);
operator<<(unsigned short val);
operator<<(int val);
operator<<(unsigned int val);
operator<<(long val);
operator<<(unsigned long val);
operator<<(long long val);
operator<<(unsigned long long val);
operator<<(float val);
operator<<(double val);
operator<<(long double val);
operator<<(const void* val);
Effects: Классы num_get<> и num_put<> обрабатывают зависящее от языкового стандарта числовое форматирование и синтаксический анализ. Эти функции вставки используют встроенное locale значение для форматирования чисел. Когдаval имеет тип bool, long, unsigned long, long long,unsigned long long, double, long double, или const void*, форматирование превращение происходит так , как будто он выполняется следующий фрагмент кода:
bool failed = use_facet< num_put<charT, ostreambuf_iterator<charT, traits>> >(getloc()).put(*this, *this, fill(), val).failed();
Когдаval is of type, short преобразование форматирования происходит так, как если бы оно выполняло следующий фрагмент кода:
ios_base::fmtflags baseflags = ios_base::flags() & ios_base::basefield; bool failed = use_facet< num_put<charT, ostreambuf_iterator<charT, traits>> >(getloc()).put(*this, *this, fill(), baseflags == ios_base::oct || baseflags == ios_base::hex ? static_cast<long>(static_cast<unsigned short>(val)) : static_cast<long>(val)).failed();
Когдаval is of type, int преобразование форматирования происходит так, как если бы оно выполняло следующий фрагмент кода:
ios_base::fmtflags baseflags = ios_base::flags() & ios_base::basefield; bool failed = use_facet< num_put<charT, ostreambuf_iterator<charT, traits>> >(getloc()).put(*this, *this, fill(), baseflags == ios_base::oct || baseflags == ios_base::hex ? static_cast<long>(static_cast<unsigned int>(val)) : static_cast<long>(val)).failed();
Whenval is of type unsigned short или unsigned int преобразование форматирования происходит так, как если бы оно выполняло следующий фрагмент кода:
bool failed = use_facet< num_put<charT, ostreambuf_iterator<charT, traits>> >(getloc()).put(*this, *this, fill(), static_cast<unsigned long>(val)).failed();
Когдаval is of type, float преобразование форматирования происходит так, как если бы оно выполняло следующий фрагмент кода:
bool failed = use_facet< num_put<charT, ostreambuf_iterator<charT, traits>> >(getloc()).put(*this, *this, fill(), static_cast<double>(val)).failed();
Первый аргумент предоставляет объект ostreambuf_iterator<> класса, который является итератором для классаbasic_ostream<>. Он обходит ostreams и использует streambufs напрямую. Класс locale полагается на эти типы как на свой интерфейс к iostreams, поскольку для гибкости он абстрагирован от прямой зависимости от ostream. Второй параметр - это ссылка на подобъект базового класса типа ios_base. Он предоставляет спецификации форматирования, такие как ширина поля и языковой стандарт, из которого можно получить другие фасеты. Если failed есть, true то это setstate(badbit)может вызвать исключение и вернуться.
basic_ostream<charT, traits>&
operator<<(basic_ostream<charT, traits>& (*pf)(basic_ostream<charT, traits>&));
Effects: Никто. Не работает как функция форматированного вывода (как описано в[ostream.formatted.reqmts]).
basic_ostream<charT, traits>&
operator<<(basic_ios<charT, traits>& (*pf)(basic_ios<charT, traits>&));
Effects: Звонки pf(*this). Этот модуль вставки не работает как функция форматированного вывода (как описано в разделе[ostream.formatted.reqmts]).
basic_ostream<charT, traits>& operator<<(ios_base& (*pf)(ios_base&));
Effects: Звонки pf(*this). Этот модуль вставки не работает как функция форматированного вывода (как описано в разделе[ostream.formatted.reqmts]).
basic_ostream<charT, traits>& operator<<(basic_streambuf<charT, traits>* sb);
Effects: Ведет себя какunformatted output function. После того, как объект-часовой создан, if sb является нулевым вызовом setstate(badbit) (который может вызывать ios_base::failure).
Получает символы изsb и вставляет их в *this. Символы считываютсяsb и вставляются до тех пор, пока не произойдет одно из следующих событий:
конец файла встречается во входной последовательности;
вставка в выходную последовательность не выполняется (в этом случае вставляемый символ не извлекается);
исключение возникает при получении символа изsb.
Если функция не вставляет символы, она вызывает setstate(failbit) (что может вызвать throw ios_base::failure ([iostate.flags])). Если было брошено исключение при извлечении персонажа, функция устанавливает failbit в состоянии ошибки, и если failbit на в exceptions() пойманном исключении является вызвано повторно.
basic_ostream<charT, traits>& operator<<(nullptr_t);
См., Например, сигнатуру функции endl(basic_ostream&).
См., Например, сигнатуру функции dec(ios_base&).
template<class charT, class traits>
basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>& out, charT c);
template<class charT, class traits>
basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>& out, char c);
// specialization
template<class traits>
basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>& out, char c);
// signed and unsigned
template<class traits>
basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>& out, signed char c);
template<class traits>
basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>& out, unsigned char c);
Effects: Ведет себя какformatted output function офout. Создает последовательность символовseq. Еслиc имеет тип, char а символьный тип потока - нет char, тоseq состоит из out.widen(c); в противном случаеseq состоит из c. Определяет заполнение,seq как описано в[ostream.formatted.reqmts]. Вставляетseq в out. Звонкиos.width(0).
template<class charT, class traits>
basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>& out, const charT* s);
template<class charT, class traits>
basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>& out, const char* s);
template<class traits>
basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>& out, const char* s);
template<class traits>
basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>& out, const signed char* s);
template<class traits>
basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>& out,
const unsigned char* s);
Effects: Работает как форматированный модуль вставки (как описано в разделе[ostream.formatted.reqmts]) изout. Создает последовательность символовseq изn символов , начиная сs, каждый расширена с помощью out.widen() ([basic.ios.members]), гдеn это число , которое будет вычислено как бы:
traits::length(s) для перегрузки, где первый аргумент имеет тип, basic_ostream<charT, traits>& а второй - типа const charT*, а также для перегрузки, где первый аргумент имеет тип, basic_ostream<char, traits>& а второй - тип const char*,
char_traits<char>::length(s) для перегрузки, где первый аргумент имеет тип, basic_ostream<charT, traits>& а второй - тип const char*,
traits::length(reinterpret_cast<const char*>(s)) для двух других перегрузок.
Определяет заполнение,seq как описано в[ostream.formatted.reqmts]. Вставляетseq в out. Звонкиwidth(0).