📄 istream.html
字号:
<HTML><HEAD><TITLE><istream></TITLE></HEAD><BODY><H1><A NAME="<istream>"><CODE><istream></CODE></A></H1><HR><P>Include the <A HREF="lib_cpp.html#iostreams">iostreams</A>standard header <B><CODE><istream></CODE></B>to define template class<CODE><A HREF="#basic_istream">basic_istream</A></CODE>,which mediates extractions for the iostreams, and the template class.<CODE><A HREF="#basic_iostream">basic_iostream</A></CODE>,which mediates both insertions and extractions.The header also defines a related<A HREF="ios.html#manipulators">manipulator</A>.(This header is typically included for you by anotherof the iostreams headers. You seldom have occasion to include itdirectly.)</P><PRE>namespace std {template<class Elem, class Tr = char_traits<Elem> > class <B><A HREF="#basic_istream">basic_istream</A></B>;typedef basic_istream<char, char_traits<char> > <B><A HREF="#istream">istream</A></B>;typedef basic_istream<wchar_t, char_traits<wchar_t> > <B><A HREF="#wistream">wistream</A></B>;template<class Elem, class Tr = char_traits<Elem> > class <B><A HREF="#basic_iostream">basic_iostream</A></B>;typedef basic_iostream<char, char_traits<char> > <B><A HREF="#iostream">iostream</A></B>;typedef basic_iostream<wchar_t, char_traits<wchar_t> > <B><A HREF="#wiostream">wiostream</A></B>; // EXTRACTORStemplate<class Elem, class Tr> basic_istream<Elem, Tr>& <B><A HREF="#operator>>">operator>></A></B>(basic_istream<Elem, Tr>& istr, Elem *str);template<class Elem, class Tr> basic_istream<Elem, Tr>& <B><A HREF="#operator>>">operator>></A></B>(basic_istream<Elem, Tr>& istr, Elem& ch);template<class Tr> basic_istream<char, Tr>& <B><A HREF="#operator>>">operator>></A></B>(basic_istream<char, Tr>& istr, signed char *str);template<class Tr> basic_istream<char, Tr>& <B><A HREF="#operator>>">operator>></A></B>(basic_istream<char, Tr>& istr, signed char& ch);template<class Tr> basic_istream<char, Tr>& <B><A HREF="#operator>>">operator>></A></B>(basic_istream<char, Tr>& istr, unsigned char *str);template<class Tr> basic_istream<char, Tr>& <B><A HREF="#operator>>">operator>></A></B>(basic_istream<char, Tr>& istr, unsigned char& ch); // MANIPULATORStemplate class<Elem, Tr> basic_istream<Elem, Tr>& <B><A HREF="#ws">ws</A></B>(basic_istream<Elem, Tr>& istr); };</PRE><H2><A NAME="basic_iostream"><CODE>basic_iostream</CODE></A></H2><PRE>template <class Elem, class Tr = char_traits<Elem> > class <B>basic_iostream</B> : public basic_istream<Elem, Tr>, public basic_ostream<Elem, Tr> {public: explicit <B>basic_iostream</B>(basic_streambuf<Elem, Tr>& *strbuf); virtual <B>~basic_iostream</B>(); };</PRE><P>The template class describes an object that controlsinsertions, through its base object<CODE><A HREF="ostream.html#basic_ostream">basic_ostream</A><Elem, Tr></CODE>,and extractions, through its base object<CODE><A HREF="#basic_istream">basic_istream</A><Elem, Tr></CODE>.The two objects share a common virtual base object<CODE><A HREF="ios.html#basic_ios">basic_ios</A><Elem, Tr></CODE>.They also manage a common<A HREF="streambu.html#stream buffer">stream buffer</A>,with elements of type <CODE>Elem</CODE>, whose<A HREF="string2.html#character traits">character traits</A> are determinedby the class <CODE>Tr</CODE>. The constructor initializes its base objectsvia <CODE>basic_istream(strbuf)</CODE> and <CODE>basic_ostream(strbuf)</CODE>.</P><H2><A NAME="basic_istream"><CODE>basic_istream</CODE></A></H2><HR><P><B><CODE><A HREF="#basic_istream::basic_istream">basic_istream</A>· <A HREF="#basic_istream::gcount">gcount</A>· <A HREF="#basic_istream::get">get</A>· <A HREF="#basic_istream::getline">getline</A>· <A HREF="#basic_istream::ignore">ignore</A>· <A HREF="#basic_istream::operator>>">operator>></A>· <A HREF="#basic_istream::peek">peek</A>· <A HREF="#basic_istream::putback">putback</A>· <A HREF="#basic_istream::read">read</A>· <A HREF="#basic_istream::readsome">readsome</A>· <A HREF="#basic_istream::seekg">seekg</A>· <A HREF="#basic_istream::sentry">sentry</A>· <A HREF="#basic_istream::sync">sync</A>· <A HREF="#basic_istream::tellg">tellg</A>· <A HREF="#basic_istream::unget">unget</A></CODE></B></P><HR><PRE>template <class Elem, class Tr = char_traits<Elem> > class <B>basic_istream</B> : virtual public basic_ios<Elem, Tr> {public: typedef typename basic_ios<Elem, Tr>::char_type char_type; typedef typename basic_ios<Elem, Tr>::traits_type traits_type; typedef typename basic_ios<Elem, Tr>::int_type int_type; typedef typename basic_ios<Elem, Tr>::pos_type pos_type; typedef typename basic_ios<Elem, Tr>::off_type off_type; explicit <B><A HREF="#basic_istream::basic_istream">basic_istream</A></B>(basic_streambuf<Elem, Tr> *strbuf); class <B><A HREF="#basic_istream::sentry">sentry</A></B>; virtual <B>~basic_istream</B>(); basic_istream& <B><A HREF="#basic_istream::operator>>">operator>></A></B>( basic_istream& (*pfn)(basic_istream&)); basic_istream& <B><A HREF="#basic_istream::operator>>">operator>></A></B>( ios_base& (*pfn)(ios_base&)); basic_istream& <B><A HREF="#basic_istream::operator>>">operator>></A></B>( basic_ios<Elem, Tr>& (*pfn)(basic_ios<Elem, Tr>&)); basic_istream& <B><A HREF="#basic_istream::operator>>">operator>></A></B>( basic_streambuf<Elem, Tr> *strbuf); basic_istream& <B><A HREF="#basic_istream::operator>>">operator>></A></B>(bool& val); basic_istream& <B><A HREF="#basic_istream::operator>>">operator>></A></B>(short& val); basic_istream& <B><A HREF="#basic_istream::operator>>">operator>></A></B>(unsigned short& val); basic_istream& <B><A HREF="#basic_istream::operator>>">operator>></A></B>(int& val); basic_istream& <B><A HREF="#basic_istream::operator>>">operator>></A></B>(unsigned int& val); basic_istream& <B><A HREF="#basic_istream::operator>>">operator>></A></B>(long& val); basic_istream& <B><A HREF="#basic_istream::operator>>">operator>></A></B>(unsigned long& val); basic_istream& <B><A HREF="#basic_istream::operator>>">operator>></A></B>(void *& val); basic_istream& <B><A HREF="#basic_istream::operator>>">operator>></A></B>(float& val); basic_istream& <B><A HREF="#basic_istream::operator>>">operator>></A></B>(double& val); basic_istream& <B><A HREF="#basic_istream::operator>>">operator>></A></B>(long double& val); streamsize <B><A HREF="#basic_istream::gcount">gcount</A></B>() const; int_type <B><A HREF="#basic_istream::get">get</A></B>(); basic_istream& <B><A HREF="#basic_istream::get">get</A></B>(char_type& ch); basic_istream& <B><A HREF="#basic_istream::get">get</A></B>(char_type *str, streamsize count); basic_istream& <B><A HREF="#basic_istream::get">get</A></B>(char_type *str, streamsize count, char_type delim); basic_istream& <B><A HREF="#basic_istream::get">get</A></B>(basic_streambuf<char_type, Tr>& strbuf); basic_istream& <B><A HREF="#basic_istream::get">get</A></B>(basic_streambuf<Elem, Tr>& strbuf, char_type delim); basic_istream& <B><A HREF="#basic_istream::getline">getline</A></B>(char_type *str, streamsize count); basic_istream& <B><A HREF="#basic_istream::getline">getline</A></B>(char_type *str, streamsize count, char_type delim); basic_istream& <B><A HREF="#basic_istream::ignore">ignore</A></B>(streamsize count = 1, int_type delim = traits_type::eof()); int_type <B><A HREF="#basic_istream::peek">peek</A></B>(); basic_istream& <B><A HREF="#basic_istream::read">read</A></B>(char_type *str, streamsize count); streamsize <B><A HREF="#basic_istream::readsome">readsome</A></B>(char_type *str, streamsize count); basic_istream& <B><A HREF="#basic_istream::putback">putback</A></B>(char_type ch); basic_istream& <B><A HREF="#basic_istream::unget">unget</A></B>(); pos_type <B><A HREF="#basic_istream::tellg">tellg</A></B>(); basic_istream& <B><A HREF="#basic_istream::seekg">seekg</A></B>(pos_type pos); basic_istream& <B><A HREF="#basic_istream::seekg">seekg</A></B>(off_type off, ios_base::seek_dir way); int <B><A HREF="#basic_istream::sync">sync</A></B>(); };</PRE><P>The template class describes an object that controlsextraction of elements and encoded objects from a<A HREF="streambu.html#stream buffer">stream buffer</A>with elements of type <CODE>Elem</CODE>, also known as<CODE><A HREF="ios.html#basic_ios::char_type">char_type</A></CODE>, whose<A HREF="string2.html#character traits">character traits</A> are determined by theclass <CODE>Tr</CODE>, also known as<CODE><A HREF="ios.html#basic_ios::traits_type">traits_type</A></CODE>.</P><P>Most of the member functions that overload<CODE><A HREF="#basic_istream::operator>>">operator>></A></CODE>are <B><A NAME="formatted input functions">formatted input functions</A></B>.They follow the pattern:</P><PRE> iostate state = goodbit; const sentry ok(*this); if (ok) {try {<extract elements and convert accumulate flags in state store a successful conversion> } catch (...) {try {setstate(badbit); } catch (...) {} if ((exceptions() & badbit) != 0) throw; }} setstate(state); return (*this);</PRE><P>Many other member functions are<B><A NAME="unformatted input functions">unformatted input functions</A></B>.They follow the pattern:</P><PRE> iostate state = goodbit; count = 0; // the value returned by gcount const sentry ok(*this, true); if (ok) {try {<extract elements and deliver count extracted elements in count accumulate flags in state> } catch (...) {try {setstate(badbit); } catch (...) {} if ((exceptions() & badbit) != 0) throw; }} setstate(state);</PRE><P>Both groups of functions call<CODE><A HREF="ios.html#basic_ios::setstate">setstate</A>(eofbit)</CODE>if they encounter end-of-file while extracting elements.</P><P>An object of class <CODE>basic_istream<Elem, Tr></CODE> stores:</P><UL><LI>a virtual public base object of class<B><CODE><A HREF="ios.html#basic_ios">basic_ios</A><Elem, Tr></CODE></B></LI><LI>an <B><A NAME="extraction count">extraction count</A></B>for the last unformatted input operation (called <CODE>count</CODE>in the code above)</LI></UL><H3><A NAME="basic_istream::basic_istream"><CODE>basic_istream::basic_istream</CODE></A></H3><PRE>explicit <B>basic_istream</B>(basic_streambuf<Elem, Tr> *strbuf);</PRE><P>The constructor initializes the base class by calling<CODE><A HREF="ios.html#basic_ios::init">init</A>(strbuf)</CODE>.It also stores zero in the<A HREF="#extraction count">extraction count</A>.</P><H3><A NAME="basic_istream::gcount"><CODE>basic_istream::gcount</CODE></A></H3><PRE>streamsize <B>gcount</B>() const;</PRE><P>The member function returns the<A HREF="#extraction count">extraction count</A>.</P><H3><A NAME="basic_istream::get"><CODE>basic_istream::get</CODE></A></H3><PRE>int_type <B><A HREF="#basic_istream::get">get</A></B>();basic_istream& <B>get</B>(char_type& ch);basic_istream& <B>get</B>(char_type *str, streamsize count);basic_istream& <B>get</B>(char_type *str, streamsize count, char_type delim);basic_istream& <B>get</B>(basic_streambuf<Elem, Tr>& strbuf);basic_istream& <B>get</B>(basic_streambuf<Elem, Tr>& strbuf, char_type delim);</PRE>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -