C++ 命名要求: UnformattedOutputFunction
来自 cppreference.com
[编辑] 要求
UnformattedOutputFunction 是一种流输出函数,它执行以下操作
1) 构造一个具有自动存储持续时间的 basic_ostream::sentry 类型的对象,该对象执行以下操作
- 如果在输出流上设置了 eofbit 或 badbit,则也会设置 failbit,并且如果在此输出流的 异常掩码 中启用了
failbit
上的异常((exceptions() & failbit) != 0),则抛出 ios_base::failure。 - 如果适用,则刷新 tie() 的输出流。
2) 通过调用
sentry::operator bool()
检查 sentry 的状态,这等效于 basic_ios::good。- 如果运算符返回 false 或 sentry 的构造函数抛出异常,则不会发生输出。
- 如果运算符返回 true,则尝试通过将字符插入输出流来执行所需的输出,就像调用 rdbuf()->sputc() 一样。也可以使用 std::basic_ostream 的其他公共成员,但 rdbuf() 的虚成员(除了 overflow()、xsputn() 和 sync())将永远不会被调用。
- 如果在输出期间抛出异常,则在输出流中设置
badbit
。如果在此流的 异常掩码 中启用了badbit
上的异常((exceptions() & badbit) != 0),则也会重新抛出该异常。 - 如果没有抛出异常,则返回函数指定的值。
- 如果在输出期间抛出异常,则在输出流中设置
3) 在任何情况下,无论是以异常终止还是返回,在离开此函数之前都会调用 sentry 的析构函数。
[编辑] 标准库
以下标准库函数是 UnformattedOutputFunction。
- basic_ostream::operator<<(basic_streambuf*)
- basic_ostream::put
- basic_ostream::write
- basic_ostream::flush
|
(自 C++11 起) |
[编辑] 缺陷报告
以下更改行为的缺陷报告已追溯应用于先前发布的 C++ 标准。
DR(缺陷报告) | 应用于 | 发布时的行为 | 正确行为 |
---|---|---|---|
LWG 63 | C++98 | 缺少异常处理策略 | 已添加 |
LWG 160 | C++98 | 确定捕获的异常是否重新抛出的过程 提到了一个不存在的函数 exception() |
已更正为 exceptions() |
LWG 165 | C++98 | 唯一允许在 rdbuf() 上调用的虚成员是 overflow() |
还允许xsputn() 和 sync() |