std::basic_ostream<CharT,Traits>::sentry
class sentry; |
||
An object of class basic_ostream::sentry
is constructed in local scope at the beginning of each member function of
std::basic_ostream
Member functions
(constructor) |
constructs the sentry object. All the preparation tasks are done here (public member function) |
(destructor) |
finalizes the stream object after formatted output or after exception, if necessary (public member function) |
operator= |
the assignment operator is deleted (public member function) |
operator bool |
checks if the preparation of the stream object was successful (public member function) |
std::basic_ostream::sentry::sentry
explicit sentry(
std::basic_ostream
<CharT, Traits>
& os )
;
|
||
Prepares the stream for formatted output.
If os.good() is false, returns. Otherwise, if os.tie() is not a null pointer, calls os.tie()->flush() to synchronize the output sequence with external streams. During preparation, the constructor may call setstate(failbit) (which may throw std::ios_base::failure
If after preparation is completed, os.good() == true, then any subsequent calls to operator bool will return true
Parameters
os | - | output stream to prepare |
Exceptions
std::ios_base::failure if the end of file condition occurs.
std::basic_ostream::sentry::~sentry
~sentry(); |
||
If (os.flags ( ) & std::ios_base::unitbuf ) && ! std::uncaught_exception ( ) && os.good ( ) ) is true, calls os.rdbuf()->pubsync() . If that function returns -1, sets badbit in os.rdstate()
std::basic_ostream::sentry::operator bool
explicit operator bool() const;
|
||
Checks whether the preparation of the output stream was successful.
Parameters
(none)
Return value
true if the preparation of the output stream was successful, false
Example
#include <iostream> #include <sstream> struct Foo { char n[6]; }; std::ostream& operator<<(std::ostream& os, Foo& f) { std::ostream::sentry s(os); if (s) os.write(f.n, 5); return os; } int main() { Foo f = {"abcde"}; std::cout << f << '\n'; }
Output:
abcde
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 397 | C++98 | the destructor might call os.flush(), which may throw exceptions | the exception is not propagated |
LWG 442 | C++98 | operator bool was not declared const (it is const in the synopsis | added const |
LWG 835 | C++98 | if os sets unitbuf , the destructor would call os.flush(), whichis an UnformattedOutputFunction and creates another sentry object |
calls os.rdbuf()->pubsync() |
See also
inserts formatted data (public member function) |