在 C++ 中,每个流都有bad
一点:
此标志由在读取或写入数据时发生错误时在流上执行的操作设置,通常会导致流的完整性丢失。
什么会导致流“失去完整性”并进入bad
状态?这与fail
状态不同,状态最常发生在输入流尝试将值存储到无法接受所述值的变量中(例如尝试将字符串存储到整数变量中)。
请注意,这个问题是c++ file bad bit的更一般形式,它特定于文件输入流;这个问题不是完全重复的,因为它通常适用于输入和输出流。
在 C++ 中,每个流都有bad
一点:
此标志由在读取或写入数据时发生错误时在流上执行的操作设置,通常会导致流的完整性丢失。
什么会导致流“失去完整性”并进入bad
状态?这与fail
状态不同,状态最常发生在输入流尝试将值存储到无法接受所述值的变量中(例如尝试将字符串存储到整数变量中)。
请注意,这个问题是c++ file bad bit的更一般形式,它特定于文件输入流;这个问题不是完全重复的,因为它通常适用于输入和输出流。
标准库在以下情况下设置 badbit:
因任何原因插入输出流
put()
或失败。write()
operator<<
由于到达了输出流的末尾,通过std::put_money
或 向输出流中的插入std::put_time
无法完成(构面的格式化输出函数,例如num_put::put()
ormoney_put::put()
,返回一个迭代器iter
,使得iter.failed()==true
)Stream 是用一个 null 指针构造的
rdbuf()
,或者putback()
/unget()
在一个带有 null 的流上被调用rdbuf()
,或者一个 null 指针传递给operator<<(basic_streambuf*)
rdbuf()->sputbackc()
或rdbuf()->sungetc()
返回traits::eof()
ungetputback() or
()`
rdbuf()->pubsync()
返回 -1 到sync()
、 到flush()
或 到流ostream::sentry
上的析构函数unitbuf
关联流缓冲区的任何成员函数(例如,、、、等)
sbumpc()
在xsputn()
Isgetc()
/ O 操作期间抛出异常overflow()
抛出异常
iword()
或pword()
(例如std::bad_alloc
)
这可能是选择 cppreference.com 而不是 www.cpluplus.com 的另一个原因,请参阅: cplusplus.com 有什么问题?
查看Apache C++ 标准库用户指南。那里列出了两个潜在的错误原因。我引用:
内存不足:没有可用于创建缓冲区的内存,或者由于其他原因(例如从流外部提供),缓冲区的大小为 0,或者流无法为自己的内部数据分配内存。
底层流缓冲区抛出异常:流缓冲区可能会失去其完整性,例如内存不足、代码转换失败或来自外部设备的不可恢复的读取错误。流缓冲区可以通过抛出异常来指示完整性丢失,该异常被流捕获并导致在流的状态中设置坏位。