📄 ostream
字号:
// Output streams -*- C++ -*-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003// Free Software Foundation, Inc.//// This file is part of the GNU ISO C++ Library. This library is free// software; you can redistribute it and/or modify it under the// terms of the GNU General Public License as published by the// Free Software Foundation; either version 2, or (at your option)// any later version.// This library is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License along// with this library; see the file COPYING. If not, write to the Free// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,// USA.// As a special exception, you may use this file as part of a free software// library without restriction. Specifically, if other files instantiate// templates or use macros or inline functions from this file, or you compile// this file and link it with other files to produce an executable, this// file does not by itself cause the resulting executable to be covered by// the GNU General Public License. This exception does not however// invalidate any other reasons why the executable file might be covered by// the GNU General Public License.//// ISO C++ 14882: 27.6.2 Output streams///** @file ostream * This is a Standard C++ Library header. You should @c #include this header * in your programs, rather than any of the "st[dl]_*.h" implementation files. */#ifndef _GLIBCXX_OSTREAM#define _GLIBCXX_OSTREAM 1//#pragma GCC system_header#include <ios>namespace std{ // [27.6.2.1] Template class basic_ostream /** * @brief Controlling output. * * This is the base class for all output streams. It provides text * formatting of all builtin types, and communicates with any class * derived from basic_streambuf to do the actual output. */ template<typename _CharT, typename _Traits> class basic_ostream : virtual public basic_ios<_CharT, _Traits> { public: // Types (inherited from basic_ios (27.4.4)): typedef _CharT char_type; typedef typename _Traits::int_type int_type; typedef typename _Traits::pos_type pos_type; typedef typename _Traits::off_type off_type; typedef _Traits traits_type; // Non-standard Types: typedef basic_streambuf<_CharT, _Traits> __streambuf_type; typedef basic_ios<_CharT, _Traits> __ios_type; typedef basic_ostream<_CharT, _Traits> __ostream_type; typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> > __num_put_type; typedef ctype<_CharT> __ctype_type; template<typename _CharT2, typename _Traits2> friend basic_ostream<_CharT2, _Traits2>& operator<<(basic_ostream<_CharT2, _Traits2>&, _CharT2); template<typename _Traits2> friend basic_ostream<char, _Traits2>& operator<<(basic_ostream<char, _Traits2>&, char); template<typename _CharT2, typename _Traits2> friend basic_ostream<_CharT2, _Traits2>& operator<<(basic_ostream<_CharT2, _Traits2>&, const _CharT2*); template<typename _Traits2> friend basic_ostream<char, _Traits2>& operator<<(basic_ostream<char, _Traits2>&, const char*); template<typename _CharT2, typename _Traits2> friend basic_ostream<_CharT2, _Traits2>& operator<<(basic_ostream<_CharT2, _Traits2>&, const char*); // [27.6.2.2] constructor/destructor /** * @brief Base constructor. * * This ctor is almost never called by the user directly, rather from * derived classes' initialization lists, which pass a pointer to * their own stream buffer. */ explicit basic_ostream(__streambuf_type* __sb) { this->init(__sb); } /** * @brief Base destructor. * * This does very little apart from providing a virtual base dtor. */ virtual ~basic_ostream() { } // [27.6.2.3] prefix/suffix class sentry; friend class sentry; // [27.6.2.5] formatted output // [27.6.2.5.3] basic_ostream::operator<< //@{ /** * @brief Interface for manipulators. * * Manuipulators such as @c std::endl and @c std::hex use these * functions in constructs like "std::cout << std::endl". For more * information, see the iomanip header. */ inline __ostream_type& operator<<(__ostream_type& (*__pf)(__ostream_type&)); inline __ostream_type& operator<<(__ios_type& (*__pf)(__ios_type&)); inline __ostream_type& operator<<(ios_base& (*__pf) (ios_base&)); //@} // [27.6.2.5.2] arithmetic inserters /** * @name Arithmetic Inserters * * All the @c operator<< functions (aka <em>formatted output * functions</em>) have some common behavior. Each starts by * constructing a temporary object of type std::basic_ostream::sentry. * This can have several effects, concluding with the setting of a * status flag; see the sentry documentation for more. * * If the sentry status is good, the function tries to generate * whatever data is appropriate for the type of the argument. * * If an exception is thrown during insertion, ios_base::badbit * will be turned on in the stream's error state without causing an * ios_base::failure to be thrown. The original exception will then * be rethrown. */ //@{ /** * @brief Basic arithmetic inserters * @param A variable of builtin type. * @return @c *this if successful * * These functions use the stream's current locale (specifically, the * @c num_get facet) to perform numeric formatting. */ __ostream_type& operator<<(long __n); __ostream_type& operator<<(unsigned long __n); __ostream_type& operator<<(bool __n); __ostream_type& operator<<(short __n) { ios_base::fmtflags __fmt = this->flags() & ios_base::basefield; if (__fmt & ios_base::oct || __fmt & ios_base::hex) return this->operator<<(static_cast<unsigned long> (static_cast<unsigned short>(__n))); else return this->operator<<(static_cast<long>(__n)); } __ostream_type& operator<<(unsigned short __n) { return this->operator<<(static_cast<unsigned long>(__n)); } __ostream_type& operator<<(int __n) { ios_base::fmtflags __fmt = this->flags() & ios_base::basefield; if (__fmt & ios_base::oct || __fmt & ios_base::hex) return this->operator<<(static_cast<unsigned long> (static_cast<unsigned int>(__n))); else return this->operator<<(static_cast<long>(__n)); } __ostream_type& operator<<(unsigned int __n) { return this->operator<<(static_cast<unsigned long>(__n)); }#ifdef _GLIBCXX_USE_LONG_LONG __ostream_type& operator<<(long long __n); __ostream_type& operator<<(unsigned long long __n);#endif __ostream_type& operator<<(double __f); __ostream_type& operator<<(float __f) { return this->operator<<(static_cast<double>(__f)); } __ostream_type& operator<<(long double __f); __ostream_type& operator<<(const void* __p); /** * @brief Extracting from another streambuf. * @param sb A pointer to a streambuf * * This function behaves like one of the basic arithmetic extractors, * in that it also constructs a sentry object and has the same error * handling behavior. * * If @a sb is NULL, the stream will set failbit in its error state. * * Characters are extracted from @a sb and inserted into @c *this * until one of the following occurs: * * - the input stream reaches end-of-file, * - insertion into the output sequence fails (in this case, the * character that would have been inserted is not extracted), or * - an exception occurs while getting a character from @a sb, which * sets failbit in the error state * * If the function inserts no characters, failbit is set. */ __ostream_type& operator<<(__streambuf_type* __sb); //@} // [27.6.2.6] unformatted output functions /** * @name Unformatted Output Functions * * All the unformatted output functions have some common behavior. * Each starts by constructing a temporary object of type * std::basic_ostream::sentry. This has several effects, concluding * with the setting of a status flag; see the sentry documentation * for more. * * If the sentry status is good, the function tries to generate * whatever data is appropriate for the type of the argument. * * If an exception is thrown during insertion, ios_base::badbit * will be turned on in the stream's error state. If badbit is on in * the stream's exceptions mask, the exception will be rethrown * without completing its actions. */ //@{ /** * @brief Simple insertion. * @param c The character to insert. * @return *this *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -