Namespaces
Variants

C++ named requirements: UnformattedOutputFunction

From cppreference.net
C++ named requirements

要求

一个 UnformattedOutputFunction 是执行以下操作的流输出函数:

1) 构造一个具有自动存储期的 basic_ostream::sentry 类型对象,该对象执行以下操作:
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

(自 C++11 起)

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 应用于 发布时行为 正确行为
LWG 63 C++98 缺少异常处理策略 已添加
LWG 160 C++98 判断捕获异常是否重新抛出的流程
提及了不存在的函数 exception()
更正为 exceptions()
LWG 165 C++98 允许在 rdbuf ( ) 上调用的
唯一虚成员是 overflow()
同时允许
xsputn() sync()