[istream] (original) (raw)
31 Input/output library [input.output]
31.7 Formatting and manipulators [iostream.format]
31.7.5 Input streams [input.streams]
31.7.5.2 Class template basic_istream [istream]
31.7.5.2.1 General [istream.general]
31.7.5.2.2 Constructors [istream.cons]
31.7.5.2.3 Assignment and swap [istream.assign]
31.7.5.2.4 Class basic_istream::sentry [istream.sentry]
31.7.5.2.1 General [istream.general]
When a function is specified with a type placeholder of extended-floating-point-type, the implementation provides overloads for all cv-unqualified extended floating-point types ([basic.fundamental]) in lieu of extended-floating-point-type.
namespace std { template<class charT, class traits = char_traits<charT>> class basic_istream : virtual public basic_ios<charT, traits> { public: using char_type = charT;using int_type = traits::int_type;using pos_type = traits::pos_type;using off_type = traits::off_type;using traits_type = traits;explicit basic_istream(basic_streambuf<charT, traits>* sb);virtual ~basic_istream();class sentry; basic_istream& operator>>(basic_istream& (*pf)(basic_istream&)); basic_istream& operator>>(basic_ios<charT, traits>& (*pf)(basic_ios<charT, traits>&)); basic_istream& operator>>(ios_base& (*pf)(ios_base&)); basic_istream& operator>>(bool& n); basic_istream& operator>>(short& n); basic_istream& operator>>(unsigned short& n); basic_istream& operator>>(int& n); basic_istream& operator>>(unsigned int& n); basic_istream& operator>>(long& n); basic_istream& operator>>(unsigned long& n); basic_istream& operator>>(long long& n); basic_istream& operator>>(unsigned long long& n); basic_istream& operator>>(float& f); basic_istream& operator>>(double& f); basic_istream& operator>>(long double& f); basic_istream& operator>>(extended-floating-point-type& f); basic_istream& operator>>(void*& p); basic_istream& operator>>(basic_streambuf<char_type, traits>* sb); streamsize gcount() const; int_type get(); basic_istream& get(char_type& c); basic_istream& get(char_type* s, streamsize n); basic_istream& get(char_type* s, streamsize n, char_type delim); basic_istream& get(basic_streambuf<char_type, traits>& sb); basic_istream& get(basic_streambuf<char_type, traits>& sb, char_type delim); basic_istream& getline(char_type* s, streamsize n); basic_istream& getline(char_type* s, streamsize n, char_type delim); basic_istream& ignore(streamsize n = 1, int_type delim = traits::eof()); basic_istream& ignore(streamsize n, char_type delim); int_type peek(); basic_istream& read (char_type* s, streamsize n); streamsize readsome(char_type* s, streamsize n); basic_istream& putback(char_type c); basic_istream& unget();int sync(); pos_type tellg(); basic_istream& seekg(pos_type); basic_istream& seekg(off_type, ios_base::seekdir);protected: basic_istream(const basic_istream&) = delete; basic_istream(basic_istream&& rhs); basic_istream& operator=(const basic_istream&) = delete; basic_istream& operator=(basic_istream&& rhs);void swap(basic_istream& rhs);};template<class charT, class traits> basic_istream<charT, traits>& operator>>(basic_istream<charT, traits>&, charT&);template<class traits> basic_istream<char, traits>& operator>>(basic_istream<char, traits>&, unsigned char&);template<class traits> basic_istream<char, traits>& operator>>(basic_istream<char, traits>&, signed char&);template<class charT, class traits, size_t N> basic_istream<charT, traits>& operator>>(basic_istream<charT, traits>&, charT(&)[N]);template<class traits, size_t N> basic_istream<char, traits>& operator>>(basic_istream<char, traits>&, unsigned char(&)[N]);template<class traits, size_t N> basic_istream<char, traits>& operator>>(basic_istream<char, traits>&, signed char(&)[N]);}
The class templatebasic_istreamdefines a number of member function signatures that assist in reading and interpreting input from sequences controlled by a stream buffer.
Two groups of member function signatures share common properties: theformatted input functions(orextractors) and theunformatted input functions.Both groups of input functions are described as if they obtain (orextract) inputcharactersby callingrdbuf()->sbumpc()orrdbuf()->sgetc().
They may use other public members ofistream.
31.7.5.2.2 Constructors [istream.cons]
explicit basic_istream(basic_streambuf<charT, traits>* sb);
Effects: Initializes the base class subobject withbasic_ios::init(sb) ([basic.ios.cons]).
Postconditions: gcount() == 0.
basic_istream(basic_istream&& rhs);
Effects: Default constructs the base class, copies thegcount() from rhs, callsbasic_ios<charT, traits>::move(rhs) to initialize the base class, and sets the gcount() for rhs to 0.
virtual ~basic_istream();
Remarks: Does not perform any operations ofrdbuf().
31.7.5.2.3 Assignment and swap [istream.assign]
basic_istream& operator=(basic_istream&& rhs);
Effects: Equivalent to swap(rhs).
void swap(basic_istream& rhs);
Effects: Calls basic_ios<charT, traits>::swap(rhs).
Exchanges the values returned by gcount() andrhs.gcount().
31.7.5.2.4 Class basic_istream::sentry [istream.sentry]
namespace std { template<class charT, class traits> class basic_istream<charT, traits>::sentry { bool ok_; public: explicit sentry(basic_istream& is, bool noskipws = false);~sentry();explicit operator bool() const { return ok_; } sentry(const sentry&) = delete; sentry& operator=(const sentry&) = delete;};}
The classsentrydefines a class that is responsible for doing exception safe prefix and suffix operations.
explicit sentry(basic_istream& is, bool noskipws = false);
Effects: Ifis.good()isfalse, calls is.setstate(failbit).
Otherwise, prepares for formatted or unformatted input.
First, ifis.tie()is not a null pointer, the function callsis.tie()->flush()to synchronize the output sequence with any associated external C stream.
Except that this call can be suppressed if the put area ofis.tie()is empty.
Further an implementation is allowed to defer the call toflushuntil a call ofis.rdbuf()->underflow()occurs.
If no such call occurs before thesentryobject is destroyed, the call toflushmay be eliminated entirely.272
If noskipws is zero andis.flags() & ios_base::skipwsis nonzero, the function extracts and discards each character as long as the next available input character c is a whitespace character.
Ifis.rdbuf()->sbumpc()oris.rdbuf()->sgetc()returnstraits::eof(), the function callssetstate(failbit | eofbit)(which may throwios_base::failure).
Remarks: The constructorexplicit sentry(basic_istream& is, bool noskipws = false) uses the currently imbued locale in is, to determine whether the next input character is whitespace or not.
To decide if the character c is a whitespace character, the constructor performs as if it executes the following code fragment:const ctype<charT>& ctype = use_facet<ctype<charT>>(is.getloc());if (ctype.is(ctype.space, c) != 0)
If, after any preparation is completed,is.good()istrue,ok_ != falseotherwise,ok_ == false.
During preparation, the constructor may callsetstate(failbit)(which may throwios_base::failure ([iostate.flags])).273
explicit operator bool() const;