In C++, each stream has a bad
bit:
This flag is set by operations performed on the stream when an error occurs while read or writing data, generally causing the loss of integrity of the stream.
Source
What would cause a stream to "lose integrity" and enter the bad
state? This is not the same as the fail
state, which most often occurs when an input stream attempts to store a value into a variable that cannot accept said value (such as attempting to store a string into an integer variable).
Note that this question is a more general form of c++ file bad bit, which is specific to file input streams; this question is not an exact duplicate as it applies to both input and output streams in general.
According to cppreference.com :
The standard library sets badbit in the following situations:
Insertion into the output stream by
put()
orwrite()
fails for any reason.Insertion into the output stream by
operator<<
,std::put_money
orstd::put_time
, could not complete because the end of the output stream was reached (The facet's formatting output function such asnum_put::put()
ormoney_put::put()
, returns an iteratoriter
such thatiter.failed()==true
)Stream is constructed with a null pointer for
rdbuf()
, orputback()
/unget()
is called on a stream with a nullrdbuf()
, or a null pointer passed tooperator<<(basic_streambuf*)
rdbuf()->sputbackc()
orrdbuf()->sungetc()
returntraits::eof()
toputback() or
unget()`
rdbuf()->pubsync()
returns -1 tosync()
, toflush()
, or to the destructor ofostream::sentry
on aunitbuf
streamException is thrown during an I/O operation by any member function of the associated stream buffer (e.g.
sbumpc()
,xsputn()
,sgetc()
,overflow()
, etc)Exception is thrown in
iword()
orpword()
(e.g.std::bad_alloc
)
This may be one more reason to choose cppreference.com over www.cpluplus.com, see: What's wrong with cplusplus.com?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With