C++ named requirements: UnformattedOutputFunction
From cppreference.net
C++
C++ named requirements
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
要求
一个 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 的其他公共成员,但 rdbuf ( ) 的虚成员除 overflow() 、 xsputn() 和 sync() 外均不会被调用。
-
-
若在输出过程中抛出异常,则在输出流中设置
badbit。若该流的 异常掩码 中启用了badbit异常( ( exceptions ( ) & badbit ) ! = 0 ),则同时重新抛出该异常。 - 若未抛出异常,则返回函数指定的值。
-
若在输出过程中抛出异常,则在输出流中设置
3)
在任何情况下,无论是因异常终止还是正常返回,哨兵对象的析构函数都会在离开此函数前被调用。
标准库
以下标准库函数属于 UnformattedOutputFunction s 。
- 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()
|