namespace std { template <class charT, class traits = char_traits<charT>> class basic_ostream : virtual public basic_ios<charT, traits> { public: // types (inherited from basic_ios): using char_type = charT; using int_type = typename traits::int_type; using pos_type = typename traits::pos_type; using off_type = typename traits::off_type; using traits_type = traits; // [ostream.cons], constructor/destructor explicit basic_ostream(basic_streambuf<char_type, traits>* sb); virtual ~basic_ostream(); // [ostream::sentry], prefix/suffix class sentry; // [ostream.formatted], formatted output basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>& (*pf)(basic_ostream<charT, traits>&)); basic_ostream<charT, traits>& operator<<(basic_ios<charT, traits>& (*pf)(basic_ios<charT, traits>&)); basic_ostream<charT, traits>& operator<<(ios_base& (*pf)(ios_base&)); basic_ostream<charT, traits>& operator<<(bool n); basic_ostream<charT, traits>& operator<<(short n); basic_ostream<charT, traits>& operator<<(unsigned short n); basic_ostream<charT, traits>& operator<<(int n); basic_ostream<charT, traits>& operator<<(unsigned int n); basic_ostream<charT, traits>& operator<<(long n); basic_ostream<charT, traits>& operator<<(unsigned long n); basic_ostream<charT, traits>& operator<<(long long n); basic_ostream<charT, traits>& operator<<(unsigned long long n); basic_ostream<charT, traits>& operator<<(float f); basic_ostream<charT, traits>& operator<<(double f); basic_ostream<charT, traits>& operator<<(long double f); basic_ostream<charT, traits>& operator<<(const void* p); basic_ostream<charT, traits>& operator<<(nullptr_t); basic_ostream<charT, traits>& operator<<(basic_streambuf<char_type, traits>* sb); // [ostream.unformatted], unformatted output basic_ostream<charT, traits>& put(char_type c); basic_ostream<charT, traits>& write(const char_type* s, streamsize n); basic_ostream<charT, traits>& flush(); // [ostream.seeks], seeks pos_type tellp(); basic_ostream<charT, traits>& seekp(pos_type); basic_ostream<charT, traits>& seekp(off_type, ios_base::seekdir); protected: // [ostream.cons], copy/move constructor basic_ostream(const basic_ostream& rhs) = delete; basic_ostream(basic_ostream&& rhs); // [ostream.assign], assign and swap basic_ostream& operator=(const basic_ostream& rhs) = delete; basic_ostream& operator=(basic_ostream&& rhs); void swap(basic_ostream& rhs); }; // [ostream.inserters.character], character inserters template<class charT, class traits> basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>&, charT); template<class charT, class traits> basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>&, char); template<class traits> basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, char); template<class traits> basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, signed char); template<class traits> basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, unsigned char); template<class charT, class traits> basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>&, const charT*); template<class charT, class traits> basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>&, const char*); template<class traits> basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char*); template<class traits> basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const signed char*); template<class traits> basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const unsigned char*); }
Шаблон класса basic_ostream определяет ряд сигнатур функций-членов, которые помогают форматировать и записывать выходные данные в выходные последовательности, управляемые буфером потока.
Две группы сигнатур функций-членов имеют общие свойства: formatted output functions (или inserters) и unformatted output functions. Обе группы функций вывода генерируют (или insert) вывод characters посредством действий, эквивалентных вызову rdbuf()->sputc(int_type). Они могут использовать другие общественные член заbasic_ostream исключением того , что они не должны вызывать какие - либо виртуальные членов , заrdbuf() исключением overflow(), xsputn()и sync().
Если одна из этих вызываемых функций вызывает исключение, тогда, если явно не указано иное, функция вывода переходит badbit в состояние ошибки. Если badbit на в exceptions(), функции выхода rethrows исключения без завершения его действия, в противном случае он ничего и лечить как ошибку не бросать.
explicit basic_ostream(basic_streambuf<charT, traits>* sb);
Effects: Создает объект класса basic_ostream, инициализируя подобъект базового класса с помощью basic_ios<charT, traits>::init(sb) ([basic.ios.cons]).
basic_ostream(basic_ostream&& rhs);
Effects: Переместите конструкции из rvaluerhs. Это выполняется по умолчанию путем создания базового класса и вызова basic_ios<charT, traits>::move(rhs) для инициализации базового класса.
virtual ~basic_ostream();
basic_ostream& operator=(basic_ostream&& rhs);
void swap(basic_ostream& rhs);
namespace std {
template <class charT, class traits = char_traits<charT>>
class basic_ostream<charT, traits>::sentry {
bool ok_; // exposition only
public:
explicit sentry(basic_ostream<charT, traits>& os);
~sentry();
explicit operator bool() const { return ok_; }
sentry(const sentry&) = delete;
sentry& operator=(const sentry&) = delete;
};
}
Этот класс sentry определяет класс, который отвечает за выполнение безопасных в отношении исключений операций с префиксом и суффиксом.
explicit sentry(basic_ostream<charT, traits>& os);
Если после любой препарат будет завершен, os.good() это true, вok_ == true противном случае ok_ == false. Во время подготовки конструктор может вызвать setstate(failbit) (который может throw ios_base::failure ([iostate.flags]))319
~sentry();
Если (os.flags() & ios_base::unitbuf) && !uncaught_exceptions() && os.good() есть true, звонит os.rdbuf()->pubsync(). Если эта функция возвращает -1, устанавливаетbadbit в os.rdstate() без распространяющегося исключения.
explicit operator bool() const;
Вызов os.tie()->flush() не обязательно происходит, если функция может определить, что синхронизация не требуется.
sentry Конструктор и деструктор может также выполнять дополнительные операции , зависящие от реализации.
Каждая функция-член поиска начинает выполнение с создания объекта классаsentry. Он возвращается, уничтожаяsentry объект.
pos_type tellp();
Returns: Если fail() != false, возвращается, pos_type(-1) чтобы указать на сбой. В противном случае возвращается rdbuf()->pubseekoff(0, cur, out).
basic_ostream<charT, traits>& seekp(pos_type pos);
Effects: Если fail() != trueвыполняется rdbuf()->pubseekpos(pos, ios_base::out). В случае неудачи вызовы функции setstate(failbit) (которые могут выкинуть ios_base::failure).
basic_ostream<charT, traits>& seekp(off_type off, ios_base::seekdir dir);
Effects: Если fail() != trueвыполняется rdbuf()->pubseekoff(off, dir, ios_base::out). В случае неудачи вызовы функцииsetstate(failbit) (которые могут выкинутьios_base::failure).