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