An object of class basic_ostream::sentry
is constructed in local scope at the beginning of each member function of std::basic_ostream that performs output (both formatted and unformatted). Its constructor prepares the output stream: checks if the stream is already in a failed state, flushes the tie()'d output streams, and performs other implementation-defined tasks if necessary. Implementation-defined cleanup, as well as flushing of the output stream if necessary, is performed in the destructor, so that it is guaranteed to happen if exceptions are thrown during output.
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 Exceptionsstd::ios_base::failure if the end of file condition occurs.
std::basic_ostream::sentry::~sentryIf (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() without propagating an exception.
std::basic_ostream::sentry::operator boolexplicit operator bool() const;
Checks whether the preparation of the output stream was successful.
Parameters(none)
Return valuetrue if the preparation of the output stream was successful, false otherwise.
[edit] 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:
[edit] Defect reportsThe 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 setsunitbuf
, the destructor would call os.flush(), which
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4