Name
basic_istream::sentry class — Sentry class for input streams
Synopsis
template <typename chT, typename traits=char_traits<chT> > class basic_istream<chT,traits>::sentry{ public: explicit sentry(basic_istream<chT,traits>& stream, bool noskipws = false); ~sentry( ); operator bool( ) const; private: sentry(const sentry&); // Not defined sentry& operator=(const sentry&); // Not defined };
A basic_istream
object
constructs a temporary sentry
object prior to each input operation. The sentry
object is destroyed when the input
operation finishes and the function returns. The sentry
manages tied streams and is
responsible for skipping whitespace prior to a formatted
read.
The stream passes itself and a flag to the sentry’s
constructor. Formatted reads (operator>>
) use false
for the second argument; unformatted
reads (get
, getline
, etc.) use true
.
If stream.good( )
is true,
the sentry first flushes any tied stream. That is, if stream.tie( )
is not null, the sentry
calls stream.tie( )->flush( )
.
This ensures that prompts and similar output appears before the
input is requested. Then, if the noskipws
argument is false, and if the
skipws
bit is not set in the
stream’s formatting flags ((ios_base::skipws
&
stream.fmtflags( ))
==
0
),
the sentry’s constructor reads and discards whitespace characters.
The sentry uses code similar to that shown in Example 13-17.
Example
const std::ctype<char_type>& ctype = std::use_facet<ctype<char_type> >(stream.getloc( ...
Get C++ In a Nutshell now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.